回答編集履歴
1
言語実装の問題
answer
CHANGED
@@ -18,4 +18,9 @@
|
|
18
18
|
MapのキーにするためにはPersonがイミュータブルであること
|
19
19
|
equals/hashCodeが変わるとMapから取り出せなくなる
|
20
20
|
|
21
|
-
変化する部分をミュータブルなオブジェクトにするのがポイント。
|
21
|
+
変化する部分をミュータブルなオブジェクトにするのがポイント。
|
22
|
+
|
23
|
+
**言語実装の問題**
|
24
|
+
|
25
|
+
Javaはイミュータブル性を保証できない言語です。イミュータブル性を保証する言語なら、古いオブジェクトから新しいオブジェクトを生成するには差分だけを作り、新旧オブジェクトの共通部分はメモリ上で共有できます。Javaは全体をディープコピーして差分を変更することしかできません。
|
26
|
+
そのほか、上のMapのキー問題や、メソッドの戻り値としてコレクションを返すときの防衛的コピーの問題、スレッドの同期化など、イミュータブル性を保証できないための弊害は言い尽くされています。
|