Domanda

Come parte di debug di un'applicazione, ho notato che Field.getDeclaredFields() restituisce alcuni campi sintetici, tra cui un serialVersionUID campo in una classe che estende un'interfaccia, anche se nessuno estendere Serializable.

Perché il compilatore aggiungere questi campi?

AGGIORNAMENTO

Infatti, c'è anche un $VRc campo sintetico creato.

È stato utile?

Soluzione

Il compilatore Java/runtime non crea automaticamente un serialVersionUID campo.Ho il sospetto che si sta utilizzando una qualche forma di bytecode enchancement quadro sotto il cofano che è incaricato di aggiungere i campi sintetici o in fase di runtime o a tempo di compilazione.

Il $VRc campo prodotto da Emma strumentazione quadro, in modo che sarebbe la ragione di almeno uno dei campi sintetici.

Il serialVersionUID il campo è anche aggiunto da Emma, quando il instr.do_suid_compensation la proprietà è impostata su true.

Altri suggerimenti

Questo campo è essenziale per Java serializzazione. In breve: consente a JVM di scoprire che la classe che è stata serializzata (ad esempio salvata su disco) è stata cambiata in seguito e non può essere deserializzata in modo sicuro su oggetto.

Dai un'occhiata a Controllo della versione Capitolo del documento citato sopra, spiega come serialVersionUID viene usato.

Aggiornamento: appena notato che la tua classe non implementa Serializable. Sei sicuro che nessuna delle super classi o interfacce implementate non si estende Serializable?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top