8

すべてのJava標準に従って、クラスを不変にしました

A. Defined class as final
B. declared all fields as private and final
C. No setter method
D. No method changes the state of object
E. declared all method as final
F. Safer/defencieve copying of collection/ non mutable object fields.

これらは、不変クラスを設計するときに行った最初のチェックポイントです。

しかし、1 つ質問が残っています。私のオブジェクトは、Java リフレクションによって変更される可能性があります。よろしいですか? または、クラスで見逃した点はありますか?

前もって感謝します。

4

3 に答える 3

8

反省から隠れることはありません-不変のクラスでさえ免疫がありません。ただし、それについてできることは何もないので、「リフレクションによって変更できない」ことは不変性の基準の1つではありません。

于 2012-10-20T03:44:06.207 に答える
3

はい。リフレクションは引き続きアクセス/変更できます。あなたは本当にそれに対して計画することはできません. 誰かがあなたのオブジェクトをリフレクションで変更している場合、私は彼らが書いているコードの品質を疑うでしょう.

不変クラスは、スレッド セーフなアプリケーションを保証するのに最適です。不変オブジェクトは常にスレッドセーフです。さらに優れた情報をお探しの場合は、Effective Java をお読みください。これは、すべての Java 開発者にとって必読です。

于 2012-10-20T05:20:08.137 に答える
1

はい、それでもリフレクションによって変更できます。それとは別に、不変にするために必要な注意を払ったようです。

于 2012-10-20T03:44:47.197 に答える