8

少し混乱するコードに出くわしました。明確にしたいのは実際には2つのバリエーションです。

例 1:

public String getFilepath(){
        final File file = new File(this.folder, this.filename);
        return file.getAbsolutePath();
    }

file" "を宣言する目的は何finalですか? Javaプリミティブは値で渡され、 をgetAbsolutePath()返すだけなStringので、変数はfinal反対側(メソッドの呼び出し側)にはありませんよね? また、変数はこれら 2 行のスコープ内にしか存在しないため、キーワードfileの目的がまったくわかりません。final足りないものはありますか?これを行う理由がわかる人はいますか?

例 2:

public String getFilepath(){
        final File file = new File(this.folder, this.filename);
        return file;
    }

ここでは実際のオブジェクトが返されているので...それはfile変数がconstant/final反対側になるということですか...? 意味がないようです。

一般に、アクセスタイプなしで変数を渡すように思えます。のように、private関数内に変数publicを返す get 関数を使用できますが、関数を呼び出して変数を受け取る変数には、アクセス修飾子を指定する必要があります。したがって、 を指定するpublicと、返される変数はpublicそのスコープ内になります。を指定するprivateと、返される変数はprivateそのスコープ内になります。との違いはありfinalますか?変数の「恒常性」は渡すことができるものですか? 私がJavaについて知っていることを考えると、これはかなりありそうもないことだと思います。

finalまたは、ポイントを完全に見逃しており、上記のコードのキーワードには他の目的がありますか?

編集:

コードを書いた元の開発者に確認したところ、finalキーワードを入れただけだったとのことでした。彼は当初、このメソッドはもっと長くなると考えていたので、ファイル全体が一定に保たれるようにしたかったからです。彼はまた、一般的に変更すべきではない変数を として宣言しfinal、原則として、原則として、以下の両方の回答で言及されていると述べました。したがって、標準的な理由で含まれている単純な追加のキーワードを読みすぎていたようです。みんな、ありがとう!

4

2 に答える 2

14

finalこの場合、ローカル参照fileが不変になることを意味します。メソッド以外では意味がありません。一部のコーディング規約では、可変である必要がない限り、すべての変数をfinalにすることを推奨しているため、誰かがそのようなガイドラインに従っているときにそのようなコードが表示されます。

于 2010-02-19T15:04:49.617 に答える
3

final を使用するとパフォーマンスが向上すると言う人もいるかもしれませんが、それは決して決定的に証明されたものではありません。

キーワードの主な利点はfinal、プログラマーがクラス、メソッド、またはフィールドを変更してはならないことを示すことです。

変数を宣言してfinalも、参照されるオブジェクトが不変になるわけではないことに注意してください。これは、変数の値を再割り当てできないことを意味します。オブジェクトを内部的fileに変更する可能性のある変数のメソッドを引き続き実行できます。File

あなたが与える2つの方法では、file変数を作成する価値はありませんfinalfinal一部のコード規則では、変更する必要がない限り、すべてを変数にすることを推奨しています。一部の人々はそれを購読していません。私はこれを予防原則のバリエーションと考えています。

于 2010-02-19T15:14:24.810 に答える