2013-02-11 133 views
1

我发现自己经常发生以下错误。java命名空间冲突

public class Foo{ 

    Bar bar; 

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

} 

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

+2

我不知道是否有编译器警告,但任何不错的IDE应该告诉你,局部变量隐藏实例变量...... – assylias 2013-02-11 16:38:44

+0

使用IDE;他们告诉你这些事情。 – 2013-02-11 16:39:02

+2

[Checkstyle可以检测到这个。](http://checkstyle.sourceforge.net/config_coding.html#HiddenField) – millimoose 2013-02-11 16:39:31

回答

2

你不能使用

this.bar = makeNewBar(); 

(这将是对类的读者也..减少混乱)


(OR)

此网址显示Eclipse可以配置为警告隐藏类成员的声明:

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

请参见上一节“现场声明隐藏另一个字段或变量”

的文档指出,该警报默认(在Eclipse)忽略,所以你是正确的,它必须是明确设置。

+2

当然他可以。这属于“不首先犯错误”。 – 2013-02-11 16:39:48

5

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

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

+1

在Netbeans中,它是一个名为“本地变量隐藏字段”的提示:工具>选项>编辑器>提示>常规>“本地变量隐藏字段” – assylias 2013-02-11 16:42:36