典型的なSpring MVCバリデータークラスでは、ErrorsオブジェクトにerrorCode値を挿入するときに、文字列(props.somefield.req
) そのようです
errors.rejectValue("elementId", "props.somefield.req");
宣言された静的な最後の文字列と対になる?
private static final String SOMFIELD_REQ = "props.somefield.req"; ...
errors.rejectValue("elementId", SOMFIELD_REQ);
少しでもパフォーマンスは向上しますか?スタックオーバーフローに関するいくつかの質問を読みました( Stringおよびfinal 、 Javaでfinal Stringを定義することは理にかなっていますか? )が、誰も答えることができません- この質問 更新の質問。
実行時には、違いはありません。
ポイントは可読性です-メンバー変数として、それはクラスのソースコードの最初に宣言されている可能性が高く、静的にすることはクラスの新しいインスタンスごとに割り当てる必要がないことを意味します。
最終的にすることは、値が変更されないことを読者に示します(コンパイラーにとっても、ここではそれほど重要ではありません)。
この方法では、実装に埋め込まれた「マジックバリュー」はなく、「定数」への変更が必要な場合は、1か所で変更するだけで済みます。
これは基本的に、Cプログラマが#defineで何をするかを模倣しています。
final
フィールドには多くの利点があります!フィールドをfinal
として宣言すると、クラスを使用または拡張する開発者にとって、ドキュメントの有益な利点があります。これは、クラスがどのように機能するかを説明するのに役立つだけでなく、設計上の決定を実施する際にコンパイラの助けを借ります。 final
メソッドとは異なり、-最終フィールドを宣言すると、オプティマイザが最適化の決定を行うのに役立ちます。フィールドの値が変更されないことがコンパイラにわかっている場合、[レジスタの値。 final
フィールドは、フィールドが読み取り専用であることをコンパイラーに強制させることにより、安全性をさらに高めます。
パフォーマンス管理ツールとしてfinal
を使用しないでください。プログラムのパフォーマンスを向上させるには、はるかに優れた、制約の少ない方法があります。 final
を使用して、プログラムの基本的なセマンティクスを反映します。クラスが不変であること、またはフィールドが読み取り専用であることを示します。
最終フィールドを宣言する前に、次のことを確認してください:このフィールドは変更可能である必要がありますか?