2016-06-18 5 views
-2

クラスでは、空のオブジェクトを定義し、必要な場所で使用したいと考えています。誤って変更するのを避けるために、このオブジェクトは不変である必要があります。このオブジェクトがpublic static finalクラスのメンバとして定義されている場合、クラス自体が変更可能な場合、オブジェクトが変更される可能性があります。可変Javaクラスで不変オブジェクトを定義する方法は?

変更可能なクラスで不変オブジェクトを作成するにはどうすればよいですか?

+0

不変であるようにするには、そのクラスを不変に設計します(またはできない場合は、*不変のクラスをラップします)。 –

+1

これはできません。呼び出されるたびに新しいインスタンスを返すメソッドを提供するか、または読み取り専用インターフェイスを定義してこれを定数の型にするか、元のクラスをラップして変更を防ぐクラスを作成します。 –

答えて

0

不変のラッパー(GOF?のプロキシ)を自分自身で書く代わりに、不変(最終的なフィールドを持つ最終クラスなど)にすることはできません。内部には元のクラスインスタンスへの代理人がいます。

1

あなたは不変クラスを作成する必要がある場合、あなたは、この要件を満たす必要があります。

  • そのすべての分野最終
  • この参照は中に脱出することが許可されていないと宣言されたクラス
  • 最終建設
  • 可変データオブジェクトを参照する任意のフィールドは、次のとおりです。
    • プライベート
    • は、彼らが直接彼らは、この変更が表示されていないクラスで内部的に変更された場合にはそうでない場合は、発信者
    • にさらされるの返されないと、クラスの外では効果がありませんん
    • 何のsetterメソッドを持っていない
+0

それは正しいですが、質問に答えません。 –

関連する問題