2009-03-03 8 views
37

Rozszerzam klasy (ArrayBlockingQueue), która implementuje Serializable interface. dokumentacja firmy Sun (i moja IDE) przypomina mi, że należy ustawić tę wartość w celu uniknięcia zgorszenia:Czy ma znaczenie to, co wybrałem dla serialVersionUID podczas rozszerzania klas Serializable w Javie?

Jednak zaleca się, aby wszystkie klasy serializacji jawnie zadeklarować wartości serialVersionUID, ponieważ domyślne serialVersionUID obliczeń jest bardzo wrażliwa do szczegółów klasy, które mogą się różnić w zależności od implementacji kompilatora, a zatem mogą powodować nieoczekiwane wyświetlenia InvalidClassException podczas deserializacji.

Teraz nie mógłbym mniej obchodzić, jaką wartość włożyć. Czy to ma znaczenie?

Odpowiedz

64

Nie - o ile zmienisz go we właściwym czasie (tj. Po wprowadzeniu zmiany, która wpływa na serializację, np. Usunięcie pola), nie powinna mieć znaczenia, jakiej wartości użyjesz.

Dla uproszczenia sugeruję zaczynać od 0 i zwiększać ją o 1 za każdym razem, gdy trzeba.

Więcej szczegółowych informacji zawiera serialization spec.

+1

Niestety Jon, link wskazuje na nieistniejący dokument (Przyznany ponad 2 lata później). –

+0

@ Elite Gentleman: Dzięki, edytowaliście, aby wskazać serwer Oracle. –

+1

Czy rozumiem, że dwie różne klasy (np. MyJLabel i MyEncoder) mogą używać tej samej wartości "serialVersionUID" i być poprawnie przekształcone w postać losową? Zakładam, że tak, ponieważ nazwy są różne, powinna to być tylko kwestia wersji. – Matthieu

10

Jedyną rzeczą, która ma znaczenie dla serialVersionUID, jest to, że serializowane wersje klasy zgodne z binarnymi wersjami mają ten sam serialVersionUID; to znaczy, jeśli nie wprowadziłeś żadnych zmian łamania do postaci serializowanej klasy, wszystko będzie dobrze.

Oczywiście lepszym rozwiązaniem jest skorzystanie z zaawansowanych opcji udostępnianych przez serializację, dzięki czemu nigdy nie będzie żadnych przełomowych zmian. Sugerowałbym czytanie o readResolve() et al. Efektywna Java omawia niektóre z drastyczniejszych problemów w tym obszarze.

Powiązane problemy