2013-07-21 12 views
5

Domyślna deserializacja typów wyliczeniowych w Javie jest ograniczona jako i readObjectNoData rzut InvalidObjectException. Z tego powodu typy wyliczeniowe są idealne do implementacji klas singletowych bez żadnych błędów (Element 77, Efektywna Java, wydanie 2, Bloch).Deserializacja enum w Javie

  • Dlaczego, z pierwszej ręki, typy enum obsługują w ogóle Serializable?
  • Jak powinny być wyliczone odniesienia w praktyce?

Odpowiedz

3

Enum types implementuje Serializable, dzięki czemu można serializować obiekty, które zawierają stałe enum. Stałe enum są deserializowane w taki sam sposób, jak każdy inny obiekt: przy użyciu ObjectInputStream.readObject(). Stałe enum są kodowane inaczej niż instancje normalnych klas, więc mogą deserializować je bez wywoływania ich metody readObject. Istnieją inne klasy, które używają specjalnych kodowań, między innymi String i Class. Więcej szczegółów znajduje się w documentation.

Jeśli chcesz zaimplementować serializowalne klasy singleton samodzielnie, spójrz na metodę readResolve.

+0

Cóż, punkt # 1 ma tutaj odpowiedź. Klasy zawierające wyliczenia enum nie powinny po prostu ulegać awarii podczas serializacji. Próbuję deserializacji domyślnej i działa po prostu! Więc dlaczego jest wiele postów omawiających efektywne deserializowanie enumów (tylko po to, by obsłużyć re-factoring kodu)? – abksrv