メソッドパラメータとローカル変数にfinalを使用するのはいつですか? 質問する

メソッドパラメータとローカル変数にfinalを使用するのはいつですか? 質問する

いくつかの参考文献を見つけました(例えば) は、final可能な限り使用することを提案していますが、それがどれほど重要なのか疑問に思っています。これは主に、メソッド パラメーターとローカル変数のコンテキストで、最終メソッドやクラスでは当てはまりません。定数の場合、それは当然の意味を持ちます。

一方では、コンパイラはいくつかの最適化を行うことができ、プログラマの意図がより明確になります。他方では、冗長性が追加され、最適化が些細なものになる可能性があります。

それは覚えておくように努力すべきことでしょうか?

ベストアンサー1

執着するもの:

  • 最終フィールド - フィールドを最終としてマークすると、構築の終了時に強制的に設定され、そのフィールド参照は不変になります。これにより、フィールドを安全に公開でき、後の読み取り時に同期する必要がなくなります。(オブジェクト参照の場合、フィールド参照のみが不変であることに注意してください。オブジェクト参照が参照するものは変更される可能性があり、それが不変性に影響します。)
  • 最終静的フィールド - 以前は静的最終フィールドを使用していた多くの場合、現在は列挙型を使用しています。

検討して慎重に使用してください:

  • 最終クラス - フレームワーク/API 設計は、私が考慮する唯一のケースです。
  • 最終メソッド - 基本的には最終クラスと同じです。テンプレート メソッド パターンを乱用して、すべてを final としてマークしている場合は、継承に頼りすぎていて、委任に頼りきれていない可能性があります。

気に入らない場合は無視してください:

  • メソッド パラメータとローカル変数 - 私はめったにこれを行いません。主に怠け者で、コードが乱雑になるからです。変更しないパラメータとローカル変数をマークする方が「正しい」ことは認めます。これがデフォルトであればいいのですが。しかし、そうではありませんし、final があちこちにあるとコードが理解しにくくなります。他の人のコードに関わっている場合は、それらを抜き出すつもりはありませんが、新しいコードを書く場合は、それらを挿入しません。1 つの例外は、匿名の内部クラス内からアクセスできるように、何かを final としてマークする必要がある場合です。

  • 編集:finalローカル変数が実際に非常に役立つユースケースが1つあることに注意してください。アダム・ジェントif/ブランチの var に値が割り当てられるときですelse

おすすめ記事