Mam dyskusję z kolegą na temat serialVersionUID klas serializowalnych: Zawsze zaczyna się od serialVersionUID = 1L
, a następnie zwiększa ją o jeden, gdy są pewne istotne zmiany w klasie.Korzyści z wygenerowanego identyfikatora serialVersionID zamiast 1L, 2L,
Klasy JDK zawsze wydają się używać bardziej skomplikowane, generowane serialVersionUIDs jak w klasie java.lang.String
:
private static final long serialVersionUID = -6849794470754667710L;
Teraz mój kolega pyta o korzyści z tego rodzaju serialVersionUID kontra znacznie prostszych serialVersionUID jak 1L, 2L , 3L ...?
Szukaliśmy również SOF, ale nie jesteśmy zbyt zadowoleni z podanych odpowiedzi, na przykład w Why generate long serialVersionUID instead of a simple 1L?.
Moim zdaniem zaletą korzystania z generowanych identyfikatorów jest to, że nie potrzebuje żadnych informacji o "starszych" wersjach klas. Jednak przy ręcznym zwiększaniu liczby identyfikatorów, musisz znać jak dotąd najwyższą wartość. Może to zabrzmieć banalnie (patrząc na bieżący serialVersionUID i zwiększyć go o 1), ale może być bardziej skomplikowany w większych projektach programistycznych, większych zespołach programistycznych lub w środowiskach rozproszonych.
Jeśli zwiększysz go, gdy wystąpią znaczące zmiany w klasie, oznacza to, że akceptujesz, że te zmiany powodują, że nowa wersja klasy jest niezgodna ze starszymi wersjami. W takim przypadku brak w ogóle identyfikatora serialVersion jest najmniej rozwlekłym i najprostszym rozwiązaniem. –
SerialVersionUID najlepiej jest traktować jako śledzącą * zgodną wersję serializowanej wersji * niż wersję klasy. Klasy mogą być modyfikowane w szerokim zakresie bez żadnych zmian w sposobie zapisywania stanu i odczytu z postaci zserializowanej. Dopóki klasa pozostaje zgodna ze swoją serializowaną formą, nie ma powodu, aby zmieniać serialVersionUID (dlatego najlepszą praktyką jest jawne określenie). – scottb
Faceci nie zrozumcie mnie źle, wiem, jak działa mechanizm serializacji i nie mam z tym problemu. Zastanawiam się tylko nad zaletą lub wadą generowanych seryjnych ID użytkowników w porównaniu z nowymi. –