2016-01-29 42 views
5

W bazie kodu, nad którym pracuję, prawie wszystkie zmienne, które są zadeklarowane jako static final String, są również zadeklarowane jako transient.Jaki jest wpływ statycznego ostatecznego przebiegu przejściowego w Javie?

Więc mam pola jak:

public static final transient String VERSION = "1.0"; 

Kusi mnie, aby usunąć te słowa kluczowe transient ilekroć je zauważyć, bo myślę, że to nie służy żadnemu celowi.

Czy jest jakaś różnica w zachowaniu między używaniem transient lub nie w tym przypadku?

+1

Zakładam, że są szczególnie odnosząc się do kombinacji z 'final', tak że http://stackoverflow.com/questions/4565653/java-static-transient-fields nie byłoby rozsądne duplikat, prawda? –

+0

zajrzyj tutaj :) [zmienne przejściowe] (http://stackoverflow.com/questions/910374/why-does-java-have-transient-variables) - Ruthi Ruth –

+0

Kto używa serializacji tak? Usuń wszystkie transjenty! :) – ZhongYu

Odpowiedz

5

Pole static jest niejawnie transient (w przypadku serializacji pola static, jego wartość i tak zostanie utracona). Tak naprawdę, nie ma potrzeby deklarowania obu.

+0

Byłoby wspaniale, gdyby można było dodać źródło, ale wygląda na to, że jest to poprawna odpowiedź. – wvdz

+2

Kiedy mówisz, że wartość została utracona, czy pole jest częścią serializacji bez wartości (powiedzmy NULL) lub czy pole nigdy nie jest traktowane jako właściwość? –

1

transient kluczowe o zmiennej zapewni, że zmienna nie jest częścią odcinkach obiektu podczas szeregowania. Jeśli twoja klasa nie jest serializable, ani jednostką JPA (która używa słowa kluczowego przejściowego, aby uniknąć przechowywania zmiennych w bazie danych), usunięcie jej powinno być w porządku.

+0

Większość z tych klas implementuje Serializable – wvdz

+0

Ok, jak podaje inna odpowiedź, statyczne elementy nie są serializowane. http://stackoverflow.com/questions/11000975/are-static-variables-serialized-in-serialization-process – Tobb