2010-12-30 14 views
39

Ich habe gerade in Java herausgefunden, dass Sie ein Feld 'statische Transiente' deklarieren können - der Compiler klagen nicht. Dies scheint in keiner Weise nützlich zu sein, da statische Felder nicht serialisiert sind, wie wir alle wissen.Java: Statische transiente Felder

Aber ich frage mich, gibt es tatsächlich einen Fall, in dem "statische transiente" Felder nützlich sind?

+30

statische transiente Felder können durch Reflexion erkannt werden. Sie können Ihren eigenen Serialisierer schreiben, um XML, JSon usw. auszuführen, und Sie können diesem eine besondere Bedeutung geben, wenn Sie auch statische Variablen speichern wollen. –

+0

+1 für einen Anwendungsfall. Mein Verständnis war, dass es überflüssig ist. – Nishant

+3

BTW: Sie können andere Modifikatorkombinationen haben, die nicht so viel Sinn wie öffentliche Konstruktor auf eine abstrakte Klasse oder eine geschützte Konstruktor/Methode einer endgültigen Klasse. –

Antwort

15

Nein - Sie haben es selbst gesagt, statische Felder sind nicht serialisiert.

Etwas komisch, dass der Compiler Sie das tun kann.

+19

Sie sind nicht durch den eingebauten Java-Serializer serialisiert. Andere Serializer können sich jedoch anders verhalten. –

+3

Und selbst mit einem anderen Serialisierer ist der Punkt, statische Felder zu speichern, ...? –

+4

@Peter, Übrigens serialVersionUID wäre eine Ausnahme. –

7

In den meisten Fällen ist es nicht sinnvoll. Statische Felder werden vom Standard-Serializer nicht serialisiert.

statictransient Felder können jedoch über Reflektion erkannt werden. Wenn jemand seinen eigenen Serialisierer schreibt und er auch statische Felder serialisieren möchte, dann könnte er das Schlüsselwort transient berücksichtigen und die Serialisierung dieses bestimmten Feldes überspringen.

PS: Diese Antwort wurde der Vollständigkeit halber veröffentlicht und basiert auf Peter Lawrey's comment. Credits für ihn.