Wpis z mikrobloga

Jest tak ponieważ przy deserializacji nie wykonywana jest żadna metoda tej klasy (nawet konstruktor). Zapisywane są po prostu wartości pól nie oznaczonych jako "transient".
Zadanie komplikuje się gdy dziedziczysz po klasie która nie umożliwia serializacji, bo wtedy wykonywany jest konstruktor pierwszej klasy w drzewku dziedziczenia która nie umożliwia serializacji (ta klasa musi przy tym dostarczać konstruktor bez argumentów).
Czy w przypadku serializacji obiektów klasy mogą różnić się metodami?

Chodzi mi o to, że w jednym miejscu klasa jest w stanie zapisać stany do pól, obiekt jest wysyłany i przy odbiorze klasa już tylko wie jak operować na polach, ale nie jak tworzyć te dane/zapisywać.


@Wyrewolwerowanyrewolwer:

To zależy.

Do zserializowanej postaci obiektu dołączana jest liczba oznaczająca wersję klasy. Ta liczba jest brana z dwóch źródeł:
- zawartość statycznego pola
@an21: Wow. Dzięki za odpowiedź. Zapisałem tę stałą w klasach i działa. Jak rozumiem jedynym moim zadaniem teraz jest dbać o to, żeby sygnatura zgadzała się po stronie serializującej i deserializującej, czyli że każdą zmianę muszę dostosować żeby działało i będzie ok, tak?

Jeszcze raz dziękuję za wyczerpującą odpowiedź!
Wow. Dzięki za odpowiedź. Zapisałem tę stałą w klasach i działa. Jak rozumiem jedynym moim zadaniem teraz jest dbać o to, żeby sygnatura zgadzała się po stronie serializującej i deserializującej, czyli że każdą zmianę muszę dostosować żeby działało i będzie ok, tak?


@Wyrewolwerowanyrewolwer: Jeśli masz stałe serialVersionUID, to nie policzy się hash, więc zmiany sygnatur metod nie powinny wpływać na serializację (tak mi się wydaję, nigdy nie sprawdzałem) bo wersje klas