1

私は頻繁に次のエラーを起こしていることに気づきました。

public class Foo{

  Bar bar;

  public void doSomething(){
    Bar bar = makeNewBar();
    // bla bla
  }

}

エラーは、ローカルのバーではなく、Foo のバーを設定したいということです。bar = makeNewBar()つまり、ではなく、と言うべきBar bar = makeNewBar()です。このような「名前空間の衝突」を検出できるコンパイラ警告フラグまたは何かがありますか? そうでない場合、これを回避する良い方法は何ですか?

4

2 に答える 2

5

これは実際にはコンパイラの仕事ではありませんが、ほとんどの IDE は、変数をシャドウすると正しい設定で警告します。

Eclipse を使用して、 に移動しPreferences / Java / Compiler / Error/Warningsて探しますName shadowing and conflicts

于 2013-02-11T16:39:56.200 に答える
2

使えませんでしたか

this.bar = makeNewBar();

(これにより、クラスの読者も混乱しなくなります..)


(また)

この URL は、クラス メンバーを非表示にする宣言について警告するように Eclipse を構成できることを示しています。

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences%2Fjava%2Fcompiler%2Fref-preferences-errors-warnings.htm

「フィールド宣言が別のフィールドまたは変数を隠す」のセクションを参照してください。

ドキュメントには、この警告は (ECLIPSE では) IGNORE にデフォルト設定されていると記載されているため、明示的に設定する必要があるという点で正しいです。

于 2013-02-11T16:39:15.193 に答える