"Ciao, Amigo! Vorrei raccontarti un altro piccolo dettaglio sulla serializzazione."
Supponiamo che la nostra classe contenga un riferimento a qualche InputStream . Quindi non può essere serializzato, giusto?
"Giusto. Tu stesso hai detto che i flussi non possono essere serializzati. E non puoi serializzare un oggetto che ha dati non serializzabili."
"Giusto. Proprio così. Ma cosa succede se la classe archivia dati che non svolgono un ruolo significativo nel suo stato e tuttavia impedisce alla classe di essere considerata una classe serializzabile? Non importa se una classe potrebbe archiviare cose non necessarie. Potrebbe lanciare questo dati in qualsiasi momento e forse lo fa anche sempre".
Per questi casi, i creatori di Java hanno escogitato la parola chiave transient . Se scriviamo questa parola chiave prima di una variabile membro, verrà ignorata durante la serializzazione. Il suo stato non sarà salvato né ricostruito. Come se non esistesse. Questa è la cosa giusta per le situazioni che abbiamo appena considerato.
Ricordi la memorizzazione nella cache e il modificatore volatile ? Non ci sono regole senza eccezioni .
Ecco uno di questi esempi di questa felicità:
Un esempio «gatto» con una variabile invisibile alla serializzazione:
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
GO TO FULL VERSION