Ho una classe che definisce un tipo di valore immutabile che ora ho bisogno di serializzare. L'immutabilità deriva dai campi finali impostati nel costruttore. Ho provato a serializzare, e funziona (sorprendentemente?) - ma non ho idea di come.In che modo la serializzazione java deserializza i campi finali quando non è specificato alcun costruttore predefinito?
Ecco un esempio della classe
public class MyValueType implements Serializable
{
private final int value;
private transient int derivedValue;
public MyValueType(int value)
{
this.value = value;
this.derivedValue = derivedValue(value);
}
// getters etc...
}
Dato che la classe non ha un costruttore senza arg, come può essere istanziato e il set campo finale?
(Una parentesi -. Ho notato questa classe soprattutto perché idea non stava generando un'ispezione "no serialVersionUID" avvertimento per questa classe, ma gli avvisi generati con successo per altre classi che ho appena fatto serializzabile)
Domanda bonus: come è serializzata una istanza di una classe * anonima *? – ewernli
Un'ipotesi: è serializzabile solo se uno dei suoi supertipi è serializzabile e la classe che lo contiene è serializzabile? Ciò sembra avere senso, ma nessuno può indovinare cosa c'è nel JLS. – mdma
Non è "nessuno indovina cosa c'è nella JLS". È lì per essere letto da chiunque. – EJP