2010-12-30 23 views
39

Ho appena scoperto in Java che è possibile dichiarare un campo 'transiente statico' - il compilatore non si lamenta. Questo non sembra essere utile in alcun modo poiché i campi statici non sono serializzati, come tutti sappiamo.Java: campi transitori statici

Ma mi chiedo, esiste effettivamente un caso in cui i campi "transitori statici" sono utili?

+30

I campi transitori statici possono essere rilevati tramite la riflessione. È possibile scrivere il proprio serializzatore per eseguire XML, JSon, ecc. E si può dare un significato speciale se si intende salvare anche variabili statiche. –

+0

+1 per ottenere un caso d'uso. La mia comprensione era che era ridondante. – Nishant

+3

BTW: Puoi avere altre combinazioni di modificatori che non hanno senso come costruttori pubblici su una classe astratta o un costruttore/metodo protetto di una classe finale. –

risposta

15

No, l'hai detto tu stesso, i campi statici non sono serializzati.

Un po 'strano che il compilatore ti permetta di farlo.

+19

Non sono serializzati dal serializzatore Java integrato. Tuttavia, altri serializzatori possono comportarsi diversamente. –

+3

E anche con un altro serializzatore, il punto di salvataggio dei campi statici è ...? –

+4

@Peter, dal modo in cui serialVersionUID sarebbe un'eccezione. –

7

Nella maggior parte dei casi, non è utile. I campi statici non sono effettivamente serializzati dal serializzatore predefinito.

Tuttavia, i campi statictransient possono essere rilevati tramite riflessione. Se qualcuno scrive il proprio serializzatore e desidera anche serializzare i campi statici, allora potrebbe prendere in considerazione la parola chiave transient e saltare la serializzazione di quel particolare campo.

PS: questa risposta viene pubblicata per motivi di completezza e si basa su Peter Lawrey's comment. Crediti a lui.

Problemi correlati