java命名空间冲突

时间:2013-02-11 16:36:48

标签: java namespaces scope

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

public class Foo{

  Bar bar;

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

}

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

2 个答案:

答案 0 :(得分:5)

这不是编译器的工作,但是如果您隐藏变量,大多数IDE会使用正确的设置警告您。

使用Eclipse,转到Preferences / Java / Compiler / Error/Warnings并查找Name shadowing and conflicts

答案 1 :(得分:2)

你不能使用

this.bar = makeNewBar();

(对于班级的读者来说,这也不会让人感到困惑..)

<小时/>

(OR)

此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,因此您必须明确设置此警告。