ちょっとtwitterで話題になったこと。
Javaのfinalというのは、その変数の参照先が変わらない(参照先が別のオブジェクトに切り替わらない)というだけで、参照先に存在するオブジェクト自体のステート不変は保証されていない。
final FooBean bar = new FooBean(); bar.setBuz("hoge"); // エラーは起こらない /* bar = new FooBean(); */ // エラー
しかし、ステートが不変である事も明示的に保証したい場合がある。
続きを読む参照するオブジェクトの中身も不変であることを保証するsuper-finalも欲しいと思った時期もあったが、仕様がむずかしそーw と思って主張を諦めた。
都元ダイスケ🍅 on Twitter: "ついでに、参照するオブジェクトの中身も不変であることを保証するsuper-finalも欲しいと思った時期もあったが、仕様がむずかしそーw と思って主張を諦めた。"