1

我发现自己经常犯以下错误。

public class Foo{

  Bar bar;

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

}

错误是我想设置 Foo 的酒吧,而不是本地酒吧。即,我应该说bar = makeNewBar(),不是Bar bar = makeNewBar()。是否有编译器警告标志或可以检测到这样的“命名空间冲突”的东西?如果没有,有什么好的方法可以避免这种情况(除了不犯错误,这显然是最好的选择=p)?

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 回答