ミューテーション方法
Java SE APIの多くのメソッドは、静的でないfinalフィールドに書込みアクセスを提供します。 つまり、Javaコードは、コンストラクタでフィールドが初期化された後、finalフィールドの値を変更できます。 mutationメソッドと呼ばれる書込みアクセスを提供するメソッドは次のとおりです。
Field.set(Object, Object)Field.setBoolean(Object, boolean)Field.setByte(Object, byte)Field.setChar(Object, char)Field.setInt(Object, int)Field.setLong(Object, long)Field.setFloat(Object, float)Field.setDouble(Object, double)MethodHandles.Lookup.unreflectSetter(java.lang.reflect.Field)
finalフィールドの値を変更するためにmutationメソッドを使用することは、finalフィールドが不変であることを期待して記述されたプログラムの正確性を損なうため、強く推奨されません。
リファレンス実装では、モジュールにコマンドライン・オプション--enable-final-field-mutation=M1,M2, ... Mn}(M1、M2、...Mnはモジュール名)を使用して、モジュールにオープンしているパッケージ内のクラスの最終インスタンス・フィールドを変更する機能をモジュールに付与できます(名前のないモジュールの場合は、特別な値ALL-UNNAMEDを使用できます)。 そのオプションによってリストされていないモジュールからのクラスの最終インスタンス・フィールドの変更は、違法と見なされます。 コマンド行オプション --illegal-final-field-mutationは、不正な最終突然変異の処理方法を制御します。 このコマンド行オプションの有効な値は、「warn」、「allow」、「debug」および「deny」です。 このオプションを指定しない場合、デフォルトは「warn」であり、不正な最終フィールド突然変異が実行時に警告されます。
バグを報告する、または機能強化を提案する
APIリファレンスおよび開発者のドキュメントの詳細は、「Java SEドキュメンテーション」を参照してください。このドキュメントには、概念的な概要、用語の定義、回避策および作業コードの例を含む、より詳細な開発者向けの説明が含まれています。 その他のバージョン。
Javaは、米国およびその他の国におけるOracleおよびその関連会社の商標または登録商標です。
Copyright © 1993, 2026, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. 使用は、「ライセンス条項」および「ドキュメンテーション再配布ポリシー」によります。