Jak wygenerować UID wersji szeregowej w Intellij

128

Kiedy używałem Eclipse miał fajną funkcję generowania UID wersji szeregowej.

Ale co robić w IntelliJ?

Jak wybrać lub wygenerować identyczny UID wersji szeregowej w IntelliJ?

A co zrobić, gdy zmodyfikujesz starą klasę?

Jeśli nie określisz id, jest generowany w czasie wykonywania ...

nazar_art
źródło
1
Duplikat stackoverflow.com/questions/12912287/ ...
Bruno Volpato,
@JFIB Stała klasy serialVersionUIDjest generowana przez kompilator, jeśli nie jest określona. Określanie ma tę zaletę (i niebezpieczeństwo), że zachowuje identyczny identyfikator dla zmienionych wersji klas. Oznacza to, że plik z obiektem starej wersji zostanie odczytany (zdeserializowany) z nową wersją lub odwrotnie.
Joop Eggen

Odpowiedzi:

306

Bez żadnych wtyczek:

Wystarczy włączyć podświetlanie: (Idea v.2016, 2017 i 2018, poprzednie wersje mogą mieć takie same lub podobne ustawienia)

Plik -> Ustawienia -> Edytor -> Inspekcje -> Java -> Problemy z serializacją -> Klasa serializowalna bez „serialVersionUID” - ustaw flagę i kliknij „OK”. (W przypadku komputerów Mac Ustawienia znajdują się w IntelliJ IDEA -> Preferencje ...)

Teraz, jeśli twoja klasa jest zaimplementowana Serializable, zobaczysz wyróżnienie i alt + Enter na nazwie klasy zaproponuje wygenerowanie private static final long serialVersionUID.

UPD: szybszy sposób na znalezienie tego ustawienia - możesz użyć klawisza skrótu Ctrl+Shift+A(znajdź akcję), wpisz Serializable class without 'serialVersionUID'- pierwszy jest tym.

Serhii Maksymchuk
źródło
2
@SalilJunior Niezupełnie. Wbudowana możliwość generowania serialVersionUID jest powiązana z ostrzeżeniami o inspekcji. Utkniesz, gdy nie chcesz włączać ostrzeżenia o inspekcji, ale w niektórych przypadkach generujesz serialVersionUID.
Fabian Barney
To rozwiązanie u mnie nie działa, widzę tylko opcje: usuń implementację Parcelable, zamień implementację parcelable, utwórz test, utwórz podklasę i ustaw pakiet jako prywatny. Klasa, której używam, implementuje jednocześnie Parcelable i Serializable. Dowolny pomysł?
gonver
Czy sprawdziłeś, że potrzebna flaga jest ustawiona w ustawieniach powyżej? Testowany zarówno w wersji 16, jak i 17, działa dobrze. Sprawdź również dodatkowe ustawienia takiej inspekcji po kliknięciu na nią w oknie ustawień (po prawej).
Serhii Maksymchuk
Nie wiedziałem o tym i uważam, że jest to bardzo pomocne.
Chaklader Asfak Arefe
62

Najłatwiejsza metoda: Alt+ Enteron

private static final long serialVersionUID = ;

IntelliJ podkreśli spację po =. umieść na nim kursor i naciśnij alt+ Enter( Option+ Enterna Macu). Pojawi się okienko z napisem „Losowa zmiana inicjatora serialVersionUID”. Po prostu naciśnij Enter, a wypełni to miejsce losowym długością.

jeremysprofile
źródło
Dzięki pracował dla mnie w IntelliJ IDEA Community Edition w wersji 2018.3.3
Tarun
Zaleca się również w dokumentach Java, aby w miarę możliwości używać prywatnego modyfikatora. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky
2
Lepsza odpowiedź na powyższe.
Akin Okegbile
32

Zainstaluj wtyczkę GenerateSerialVersionUID

Meo
źródło
2
Po co instalować wtyczkę, skoro można to łatwo zrobić, jak pokazano poniżej na @Serhii.
shaz
2
@shaz Wolę, gdy ta inspekcja jest wyłączona, ale dla niektórych klas wymagane jest uzyskanie jawnego serialVersionUID. Nie chcę rozpraszać kontroli każdej klasy, podczas gdy serialVersionUID potrzebuję tylko dla jednej.
Timofey
1
Myślę, że wtyczka pomaga w generowaniu wartości dla podklas, w których klasa nadrzędna jest również możliwa do serializacji i zawiera rozszerzenie serialVersionUID. Daje to rozwiązanie w przypadku, gdy zaktualizowałeś klasę podrzędną i musisz wygenerować nowy serialVersionUID dla tej klasy bez zmiany serialVersionUID klasy nadrzędnej (w przypadkach, gdy nie wprowadzono żadnych zmian w klasie nadrzędnej).
kapad
Chociaż może to odpowiedzieć na pytanie, lepiej jest podać tutaj rzeczywiste informacje, a nie tylko link. Odpowiedzi zawierające tylko łącze nie są uważane za dobre odpowiedzi i prawdopodobnie zostaną usunięte .
elixenide
3
@EdCottrell Nie ma innych informacji do przekazania. Albo użyj wtyczki, albo nie.
Meo,
2

IntelliJ IDEA Plugins / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

bardzo ładny, bardzo łatwy w montażu. możesz to zainstalować z menu wtyczek, wybrać zainstaluj z dysku, wybierz plik jar, który rozpakowałeś w folderze lib. restart, control + ins i wyskakuje, aby wygenerować szeregowy UID z menu. kocham to. :-)

Patch Rhythm
źródło
0

w edytorze kodu otwórz klasę, dla której chcesz utworzyć identyfikator UID, kliknij prawym przyciskiem myszy -> Generuj -> SerialVersionUID. Aby to zadziałało, może być konieczne zainstalowanie wtyczki GenerateSerialVersionUID.

mój klucz
źródło
1
Jak myślisz, w jaki sposób twoja odpowiedź dodaje coś nowego do rozwiązania tego problemu? Jeśli nie, po prostu usuń swoją odpowiedź, ponieważ jest bezużyteczna.
nazar_art
po dodaniu wtyczki niektórzy mogą nie wiedzieć, jak właściwie wygenerować UID. To jest to, co zostało dodane.
mykey
1
Sądzę, że mogą przeczytać stronę podręcznika dla tej wtyczki. Twoja odpowiedź jest oczywista.
nazar_art