2010-12-30 15 views
39

私はJavaで、静的な一時的なフィールドを宣言することができました。コンパイラは文句を言っていません。これは、静的フィールドがシリアル化されていないので、私たちすべてが知っているように、何らかの形で役に立つとは思われません。Java:静的過渡フィールド

しかし、実際には「静的過渡」フィールドが有用な場合がありますか?

+30

静的過渡フィールドは、反射によって検出できます。 XML、JSonなどを行う独自のシリアライザを記述することができます。静的変数も保存する場合は、これを特別な意味があります。 –

+0

+1はユースケースを取得します。私の理解は冗長だった。 – Nishant

+3

BTW:抽象クラスのpublicコンストラクタや最終クラスのprotectedコンストラクタ/メソッドのように他の修飾子の組み合わせを使用することはできません。 –

答えて

15

いいえ - あなた自身が言っていますが、静的フィールドはシリアル化されていません。

コンパイラがそうすることができますか?

+19

組み込みJavaシリアライザによってシリアル化されません。しかし、他のシリアライザは異なる動作をすることができます。 –

+3

さらに、別のシリアライザを使用しても、静的フィールドを保存するのは...? –

+4

@Peter、ところでserialVersionUIDは例外です。 –

7

ほとんどの場合、それは役に立ちません。静的フィールドは実際にはデフォルトのシリアライザによってシリアル化されません。

しかし、statictransientのフィールドは、反射によって検出できます。誰かが独自のシリアライザを作成し、静的フィールドをシリアル化する場合は、キーワードを考慮してtransientキーワードをとり、その特定フィールドのシリアル化をスキップします。

PS:この回答は完全なものとして投稿されており、Peter Lawrey's commentに基づいています。彼にクレジット。