私の主張は常に「IDEがアルゴリズムでそれを実行できるのであれば、JVMも実行できる」というものでした。
この議論は水を保持しますか?
いいえ。IDEがそれを行うとき(そして、そのように明示的に構成することはできますが、デフォルトで尋ねることなくそれを行うことはありません)、開発者はそれが本当に彼らが望んでいた決定であるかどうかを確認できます。これにより、他のコードが開発者の意向に反することを防ぐことができます。
それが実行時にのみ行われた場合、それは目的全体を無効にするでしょう。他のコードがフィールドを変更できないようにフィールドを作成した場合final
、他のコードがフィールドを変更しようとすると、コンパイル時エラーが発生します。それがJVMに任されているだけなら、私はそれを変更しないコードに頼ることはできません。
Java開発者はいつ「final」キーワードを使用する必要がありますか?
フィールドの場合、フィールドがコンストラクターで初期化され、その後変更されないことを意図している場合。
クラスの場合、クラスがサブクラス(IMO)になるように設計していない場合。
メソッドの場合、メソッドをオーバーライドするサブクラスのコードを設計していない場合。
ローカル変数の場合、匿名内部クラスの変数にアクセスします。(もちろん、他のローカル変数にも使用できます。私はそうする傾向はありませんが、そうする人もいます。もちろん、その違いは、メソッド外のコードには表示されません。)