2016-01-29 35 views
5

Nel codice base su cui sto lavorando, quasi tutte le variabili dichiarate static final String vengono dichiarate anche transient.Qual è l'effetto del transitorio finale statico in Java?

così ho campi come:

public static final transient String VERSION = "1.0"; 

Sono tentato di rimuovere questi transient parole chiave ogni volta che li ho posto, perché penso che non serve alcuno scopo.

C'è qualche differenza nel comportamento tra l'utilizzo di transient o non in questo caso?

+1

Suppongo che ti riferisci in particolare alla combinazione con 'final', in modo che http://stackoverflow.com/questions/4565653/java-static-transient-fields non sia un duplicato ragionevole, giusto? –

+0

per favore dare un'occhiata qui :) [variabili transitori] (http://stackoverflow.com/questions/910374/why-does-java-have-transient-variables) - Ruthi Ruth –

+0

Chi usa comunque la serializzazione? Rimuovi tutti i transienti! :) – ZhongYu

risposta

5

Un campo static è implicitamente transient (durante la serializzazione di un campo static, il suo valore verrà comunque perso). Quindi, in effetti, non c'è bisogno di dichiarare entrambi.

+0

Sarebbe fantastico se potessi aggiungere una fonte, ma sembra che sia comunque la risposta corretta. – wvdz

+2

Quando si dice che il valore è perso, il campo fa parte della serializzazione senza un valore (ad esempio null) o il campo non viene mai visualizzato come proprietà? –

1

La parola chiave transient su una variabile garantisce che la variabile non faccia parte dell'oggetto serializzato durante la serializzazione. Se la classe non è serializable, né un'entità JPA (che utilizza la parola chiave transitoria per evitare la memorizzazione di variabili nel database), rimuoverla dovrebbe andare bene.

+0

La maggior parte di queste classi implementa Serializable – wvdz

+0

Ok, come gli altri stati di risposta, i membri statici non sono comunque serializzati. http://stackoverflow.com/questions/11000975/are-static-variables-serialized-in-serialization-process – Tobb