java [duplicate]での最終的なローカル変数の使用


Answers

最終的なローカル変数は匿名の内部サブクラスからアクセスできますが、最終的なローカル変数ではない可能性があります。

Question

私は、最終的なローカル変数を使用することの有用性があるのだろうかと思っていました。 継承が現れると、変数はオーバーライドされません。 例えば、以下のような簡単なコード

public static void main(String args[]) {
    final String data = "Hello World!";
    System.out.println(data);
}

この例は非常に単純なものであり、関連するコードではないかもしれませんが、問題はより一般的です。私は多くのコードを見てきました(すべてが最終的なローカル変数を持つmain関数に組み込まれています)同じ機能自体では編集できないのですか?




完璧な答えJon Skeetしかし、最終的な変数の別の(少しの)利点があります。

コンパイラは、最終変数が1回だけ設定されるようにします。

変数を初期化しなければならず、値の計算は複雑です(if-then-else内の複数のif-then-else)。 ある条件で変数を初期化しないコードを書くかもしれません(あるいはそれを2回初期化するかもしれません)。 もちろん、これはバグです。 変数をfinalにすると、コンパイラは最終変数が一度だけ設定されていることを確認できます。 あなたがバグを持っているかどうかをすぐに知ることができます。

私が言ったように、ほとんど利益はないが、まだ便利です。




それは、他のプログラマーに、それを書いた人がいったん割り当てられれば、 データの価値が変わるべきではないことを知っていることを伝えます。 私の意見では、特にパラメータ変数をfinalと宣言するのは良い習慣です。




javaでの最終的なローカル変数の使用

finalフィールド、パラメータ、およびローカル変数は、 読み取り専用です (オブジェクトの状態ではなく、オブジェクトの識別情報を意味します)。






Links