ちょっとtwitterで話題になったこと。

Javaのfinalというのは、その変数の参照先が変わらない(参照先が別のオブジェクトに切り替わらない)というだけで、参照先に存在するオブジェクト自体のステート不変は保証されていない。

final FooBean bar = new FooBean();
bar.setBuz("hoge");	// エラーは起こらない
/* bar = new FooBean(); */	// エラー

しかし、ステートが不変である事も明示的に保証したい場合がある。

参照するオブジェクトの中身も不変であることを保証するsuper-finalも欲しいと思った時期もあったが、仕様がむずかしそーw と思って主張を諦めた。

都元ダイスケ🍅 on Twitter: "ついでに、参照するオブジェクトの中身も不変であることを保証するsuper-finalも欲しいと思った時期もあったが、仕様がむずかしそーw と思って主張を諦めた。"
続きを読む