Jak wygenerować tę wartość w IntelliJ IDEA?
Idę do Ustawienia -> Błędy -> Problemy z serializacją -> Klasa możliwa do serializacji bez „serialVersionUID”, ale nadal nie wyświetla mi ostrzeżenia. Mój rodzic PKladrBuilding rodzic implementuje interfejs Serializable .
Część kodu:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
java
serialization
intellij-idea
Kirill Bazarov
źródło
źródło
1L
Jako swojego identyfikatora i przyrostu, gdy zmieni się formularz zserializowany. (Zobacz stackoverflow.com/questions/888335/… ).Odpowiedzi:
Nie jestem pewien, czy masz starą wersję IntelliJ IDEA, ale jeśli przejdę do menu Plik → Ustawienia ... → Inspekcje → Problemy z serializacją → Klasa możliwa do serializacji bez włączonej opcji „serialVersionUID”, klasa, którą podajesz, daje mi ostrzeżenia.
Jeśli spróbuję pierwszej klasy, zobaczę:
BTW: Nie pokazało mi ostrzeżenia, dopóki nie dodałem
{ }
na końcu każdej klasy, aby naprawić błąd kompilacji.źródło
File
|Invalidate Caches
, jeśli to nie pomoże, skontaktuj się z [email protected] z przykładowym projektem do odtworzenia.idea.log
(Pomoc | Reveal Log in ...) wyjątki, wiadomo, że zaszyfrowany katalog domowy w systemie Linux powoduje problemy z powodu błędu jądra .Zainstaluj wtyczkę GenerateSerialVersionUID autorstwa Oliviera Descouta.
Przejdź do: menu Plik → Ustawienia → Wtyczki → Przeglądaj repozytoria →
GenerateSerialVersionUID
Zainstaluj wtyczkę i uruchom ponownie.
Teraz możesz wygenerować identyfikator z menu Kod → Generuj → serialVersionUID` lub skrót.
źródło
Bez żadnych wtyczek: wystarczy włączyć wyróżnienie w IntelliJ:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'
- ustaw flagę i kliknij'OK'
.Teraz, jeśli twoja klasa zaimplementuje
Serializable
, zobaczysz wyróżnienie, aalt+Enter
na nazwie klasy zaproponuje wygenerowanieprivate static final long serialVersionUID
.PS: Zaczerpnięte stąd
źródło
Po spędzeniu czasu na serializacji uważam, że nie powinniśmy generować
serialVersionUID
losowych wartości, powinniśmy nadać im znaczącą wartość.Oto komentarz do szczegółów na ten temat. Skopiuję komentarz tutaj.
Mam nadzieję że to pomoże. Powodzenia.
źródło
serialVersionUID
z nową losową liczbą, gdy nie chcę obsługiwać starych wersji przy deserializacji. Może nie muszę używać liczb losowych, ale mogę zacząć od 1 i zwiększyć go. Nie3L
ma to jednak dla mnie większego znaczenia-3518231192373568183L
. Dlatego wydaje mi się, że oba rozwiązania działają podobnie. Jednak liczba losowa może mieć tę zaletę, że budzi się w nieliniowych historiach z widelcami i rozgałęzieniami.Aby wygenerować wartość, użyj
i podaj zmienną szablonu randomLong o następującej wartości: groovyScript („new Random (). nextLong (). abs ()”)
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
źródło
Ponadto możesz dodać szablon na żywo, który wykona pracę.
Aby to zrobić, naciśnij Ctrl+Alt+S->
"Live Templates"
sekcja ->other
(lub w / e chcesz)A następnie utwórz nową z taką definicją:
Następnie wybierz
definition
zakres i zapisz go jako'serial'
Teraz możesz wpisać
serial
TABtreść klasy.źródło
Innym sposobem na wygenerowanie serialVersionUID jest użycie
>Analyze >Run Inspection by Name
z menu kontekstowego (lub skrótu klawiaturowego, który domyślnie jest ctrl+ alt+ shift+ i), a następnie wpisz „Serializable class bez„ serialVersionUID ”” (lub po prostu wpisz „serialVersionUID” i typ naprzód funkcja znajdzie to dla ciebie.Otrzymasz wtedy menu kontekstowe, w którym możesz wybrać, gdzie przeprowadzać inspekcje (np. Wszystkie z określonego modułu, całego projektu, jednego pliku, ...)
Dzięki takiemu podejściu nie musisz nawet ustawiać ogólnych zasad inspekcji na niczym.
źródło
Z wersją
v2018.2.1
Iść do
Ostrzeżenie powinno pojawić się obok deklaracji klasy.
źródło
Korzystam z Androida Studio 2.1 i mam większą spójność w uzyskiwaniu żarówki, klikając nazwę klasy i najeżdżając na nią myszą przez sekundę.
źródło
Dodaj szablon aktywny o nazwie „ser” do drugiej grupy, ustaw go na „Dotyczy w Javie: deklaracja” i odznacz „Skróć nazwy FQ”. Daj mu tekst szablonu:
Teraz edytuj zmienne i ustaw serial na:
Zakłada standardowy układ projektu Gradle. Zmień / build / to / target / for Maven.
źródło
Najłatwiejsza nowoczesna metoda:
Alt
+Enter
włączonyIntelliJ podkreśli przestrzeń po
=
. umieść na nim kursor i naciśnijalt
+Enter
(Option
+Enter
na Macu). Pojawi się okienko z napisem „Losowo zmień inicjator serialVersionUID”. Po prostu wciśnij Enter, a zapełni to miejsce losową długością.źródło
Jeśli chcesz dodać nieobecny serialVersionUID dla kilku plików, IntelliJ IDEA może nie działać zbyt dobrze. Wymyślam prosty skrypt, aby z łatwością osiągnąć ten cel:
Zapisujesz ten skrypt, powiedz jak
add_serialVersionUID.sh
w~/bin
folderze. Następnie uruchom go w katalogu głównym projektu Maven lub Gradle, np .:Ten plik .lst zawiera listę plików Java do dodania serialVersionUID w następującym formacie:
Ten skrypt używa narzędzia JDK serialVer. Jest to idealne rozwiązanie w sytuacji, gdy chcesz zmienić ogromną liczbę klas, które w pierwszej kolejności nie miały ustawionego serialVersionUID, zachowując zgodność ze starymi klasami.
źródło