1

final1) コンストラクターで 1 回だけ設定される 2) 不変オブジェクトへの参照であるオブジェクト フィールドに使用することは良い習慣であることを理解しています。

コンストラクターで一度だけ設定され、変更可能なオブジェクトを参照するフィールドはどうですか?

現在、finalどのフィールドがオブジェクトの変更可能な状態 (最終的でないもの) を表しているかをすぐに確認できるため、不変オブジェクト参照のみを使用することを好みます。

更新: final が技術的にどのように機能するかを知っています。具体的には、変更可能なオブジェクトへの参照を final として設定しても、オブジェクトが不変にならないことを知っています。この質問は、コードの明確さと理解可能性を最大限に高めたい場合に、いつ final を使用するかについてです。

4

2 に答える 2

2

これは一般的な意見ではないかもしれませんが、final可能な限り使用します。意図を宣言するために使用している場合は、コメントで行うことができます。それに対するあなたの反応が「コメントは悪い」というものである場合は、finalキーワードの使用も再考する必要があります。これは基本的にコメントであるためですよね?

ただし、 final キーワードは、その変数がどこにもリセットされないことをコードを読んでいる人に (ほぼ) 保証します(もちろんリフレクションは無視します...) - これは時々知っておくと便利なことです。

この質問に対するジョンの回答にも興味があるかもしれません

編集:申し訳ありませんが、「可能な限り」がフィールドに適用されることを明確にする必要があります-クラス、メソッドなどではありません。

于 2012-12-10T20:41:03.170 に答える
1

変数を宣言してもfinal、参照されるオブジェクトは変更可能です。したがって、これが回避しようとしている場合は機能しません(参照されるオブジェクトを不変にすることを意味します)

于 2012-12-10T20:04:30.223 に答える