0

プライベート メソッドに渡されるプライベート final インスタンス変数がある場合、パラメーターとして渡されるときに関数で final 修飾子を使用して再宣言しますか? 例えば:

public class GraphAlgo {

  private final source;

  public GraphAlgo(source) {
     this.source = source
  }

  public void runAlgo() {
     runAlgoUsingSource(source);
  } 

  private runAlgoUsingSource(final source) {  // here final is declared on a final field
    //-- whatever.
  } 
}

既に final になっているパラメーターに対して final を宣言しないでください。アドバンテージ。final 修飾子の重複を防止します。 欠点: 明示的な画像を提供しません。たとえば、GraphAlgo が 10000 行のコードの場合、関数 'runAlgoUsingSource' を見るだけでは、'source' が final であるかどうかを理解するための視覚的なアクセスがありません。

この場合の一般的な規則は何ですか?

4

4 に答える 4

4

ここでsourceは、すでにインスタンス変数です。なぜメソッドに渡すのですか?ちなみにこちら、

private runAlgoUsingSource(final source) {

sourceローカル変数としてスコープされ、インスタンス変数と同じ名前が付けられた別の変数になりました。(型も必要です。) この localsourceがであるかどうかは、(インスタンス変数) がであるfinalかどうかに依存しません。this.sourcefinal

于 2013-08-13T23:01:06.257 に答える
0

これは慣例の問題ではありません。2 つのfinal宣言の意味は異なります。フィールドの値がパラメーターに流れ込む場合でも、フィールドがfinal非パラメーターである場合もあれば、finalその逆の場合もあります。

議論の問題ですが、私の見解では、final必要な場合にのみパラメーターを宣言する必要があります。基本的に、パラメーター final を宣言する必要がある唯一の理由は、匿名の内部クラスでその値を使用する場合です。一方、フィールドは、final明示的に変更する必要がない限り、そうする必要があります。

于 2013-08-13T23:02:12.747 に答える