2013-07-21 30 views
5

La deserializzazione predefinita dei tipi di enum in Java è limitata in quanto il numero readObject e readObjectNoData genera InvalidObjectException. Per questo motivo i tipi di enum sono perfetti per implementare classi singleton senza alcun difetto (Articolo 77, Java efficace, 2a edizione, Bloch).Deserializzazione di enum in Java

  • Perché, da un lato, i tipi di enum implementano Serializable?
  • Come dovrebbero essere deserializzati i riferimenti enumerici nella pratica?

risposta

3

I tipi di enum implementano Serializable in modo da poter serializzare oggetti che contengono costanti enum. Le costanti Enum sono deserializzate allo stesso modo di tutte le altre objest: utilizzando ObjectInputStream.readObject(). Le costanti Enum sono codificate in modo diverso rispetto alle istanze delle classi normali, pertanto ObjectInputStream.readObject() può deserializzarle senza chiamare il metodo readObject. Esistono altre classi che utilizzano codifiche speciali, tra cui String e Class. Vedere lo documentation per ulteriori dettagli.

Se si desidera implementare classi singleton serializzabili, consultare il metodo readResolve.

+0

Bene, il punto 1 ha una risposta qui. Le classi contenenti riferimenti enum non dovrebbero semplicemente bloccarsi sulla serializzazione. Provo la deserializzazione predefinita e ha funzionato semplicemente! Allora perché, ci sono molti post che discutono efficacemente la deserializzazione delle enumerazioni (solo per soddisfare il ri-factoring del codice)? – abksrv