Kiedy używasz serialVersionUID (1L) zamiast generowania serialVersionUID (3567653491060394677L), coś mówisz.
Mówisz, że masz 100% pewności, że żaden system, który nigdy nie dotknie tej klasy, miałby niezgodną wersję tej klasy z serializacją o numerze wersji 1.
Jeśli wymyślisz jakieś usprawiedliwienie dla nieznanej historii wersji serializowanej, może to być trudne do powiedzenia z pewnością. Za jego życia wiele osób będzie utrzymywać udaną klasę, żyć w wielu projektach i przebywać w wielu systemach.
Możesz nad tym męczyć. Lub możesz zagrać na loterii, mając nadzieję na przegraną. Jeśli wygenerujesz wersję, masz małe szanse, że coś pójdzie nie tak. Jeśli założysz „Hej, założę się, że nikt jeszcze nie użył 1”, Twoje szanse są większe niż małe. Właśnie dlatego, że wszyscy uważamy, że 0 i 1 są fajne, masz większe szanse na ich trafienie.
-
Kiedy generujesz serialVersionUID (3567653491060394677L) zamiast używać serialVersionUID (1L), coś mówisz.
Mówisz, że ludzie mogli ręcznie tworzyć lub generować inne numery wersji w historii tej klasy i nie obchodzi cię to, ponieważ Longs cholernie duże liczby.
Tak czy inaczej, chyba że doskonale znasz historię numerów wersji używanych do serializacji klasy w całym wszechświecie, w którym istnieje lub będzie istnieć, ryzykujesz. Jeśli masz czas, aby upewnić się w 100%, że 1 to AOK, idź. Jeśli to za dużo pracy, śmiało wygeneruj liczbę. Bardziej prawdopodobne jest, że wygrasz na loterii niż popełnisz błąd. Jeśli tak, daj mi znać, a kupię ci piwo.
Po tych wszystkich rozmowach na temat gry w loterię mogłem sprawiać wrażenie, że serialVersionUID jest generowany losowo. W rzeczywistości, o ile zakres liczb jest równomiernie rozłożony na każdą możliwą wartość Długości, co byłoby w porządku. Jednak tak naprawdę dzieje się tak:
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100
Jedyną różnicą, jaką możesz z tym zrobić, jest to, że nie potrzebujesz źródła losowego. Używasz zmian w samej klasie, aby zmienić wynik. Ale zgodnie z zasadą szufladki nadal istnieje szansa, że może się nie udać i dojść do kolizji. To jest po prostu niezwykle mało prawdopodobne. Życzę powodzenia w wydostaniu ze mnie piwa.
Jednak nawet jeśli klasa będzie żyła tylko w jednym systemie i jednej bazie kodu, myślenie, że ręczne zwiększenie liczby daje zerową szansę na kolizję, oznacza po prostu, że nie rozumiesz ludzi. :)