ミューテーション方法

Java SE APIの多くのメソッドは、静的でないfinalフィールドに書込みアクセスを提供します。 つまり、Javaコードは、コンストラクタでフィールドが初期化された後、finalフィールドの値を変更できます。 mutationメソッドと呼ばれる書込みアクセスを提供するメソッドは次のとおりです。

finalフィールドの値を変更するためにmutationメソッドを使用することは、finalフィールドが不変であることを期待して記述されたプログラムの正確性を損なうため、強く推奨されません。

リファレンス実装では、モジュールにコマンドライン・オプション--enable-final-field-mutation=M1,M2, ... Mn}(M1M2...Mnはモジュール名)を使用して、モジュールにオープンしているパッケージ内のクラスの最終インスタンス・フィールドを変更する機能をモジュールに付与できます(名前のないモジュールの場合は、特別な値ALL-UNNAMEDを使用できます)。 そのオプションによってリストされていないモジュールからのクラスの最終インスタンス・フィールドの変更は、違法と見なされます。 コマンド行オプション --illegal-final-field-mutationは、不正な最終突然変異の処理方法を制御します。 このコマンド行オプションの有効な値は、「warn」、「allow」、「debug」および「deny」です。 このオプションを指定しない場合、デフォルトは「warn」であり、不正な最終フィールド突然変異が実行時に警告されます。