[解決済み] メソッドのパラメータやローカル変数にfinalを使用するのはどのような場合ですか?
2022-04-20 12:30:50
質問
いくつかの文献を見つけたのですが(
例えば
を使用することを推奨しています。
final
というのが気になるのですが、どうなんでしょう?これは主にメソッドのパラメータとローカル変数の文脈で、ファイナルメソッドやクラスではありません。定数については、明らかに意味があります。
一方では、コンパイラが最適化を行うことができ、プログラマの意図を明確にすることができます。一方では、冗長性が増し、最適化が些細なものになる可能性もある。
覚える努力をするものなのでしょうか?
どのように解決するのか?
こだわる。
- 最終フィールド - フィールドを最終とマークすることで、構築の終了時に強制的に設定し、そのフィールドの参照を不変にします。 これにより、フィールドの安全な公開が可能になり、後の読み込み時の同期の必要性を回避することができる。 (オブジェクト参照では、フィールド参照だけが不変であることに注意してください。オブジェクト参照が参照するものはまだ変更可能で、それが不変性に影響します)。
- 静的最終フィールド - 以前は静的最終フィールドを使っていた多くのケースで、今はenumを使っていますが。
検討するが、慎重に使用する。
- 最終クラス - フレームワーク/API設計は、私が考慮する唯一のケースです。
- 最終メソッド - 基本的には最終クラスと同じ。 もし、テンプレートメソッドパターンを狂ったように使い、finalをマークしているならば、おそらく継承に頼りすぎていて、委譲が十分でないのでしょう。
アナログな感じがしない限り、無視する。
-
メソッドのパラメータとローカル変数 - 私は怠惰なため、またコードが煩雑になるため、めったにこれを行いません。 修正するつもりのないパラメータとローカル変数をマークすることは、より正しいことだと思います。 デフォルトであればよかったのですが。 でも、そうでない場合、コードを理解するのが難しくなります。 他人のコードなら抜かないけど、新しいコードを書くなら入れない。 例外は、匿名の内部クラスからアクセスできるように、何かをfinalにする必要がある場合です。
-
編集:最終ローカル変数が実際に非常に有用である1つのユースケースは、以下のように言及されていることに注意してください。 アダム・ゲント に値が代入される場合です。
if
/else
の枝になります。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
javaで非静的な解を静的な参照にすることができない
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Javaエラーメッセージがenclosingクラスでない
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
-
[解決済み] Java の assert キーワードは何をするのか、そしていつ使うべきなのか?
-
[解決済み] 可能な限り常にパラレルストリームを使用した方がいいのでしょうか?
-
[解決済み] いつ使うか。Java 8+のインターフェイスのデフォルトメソッドと、抽象的なメソッドの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
プロローグでのコンテンツは禁止されています
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
org.glassfish.jersey.servlet.ServletContainer
-
IDEA パッケージステートメントの欠落
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策