2013-02-11 141 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