2011-10-21 68 views
48

是否使用Java的默認包是一個不好的做法?是否使用Java的默認包是一種不好的做法?

+0

我試圖從其他「真實」軟件包中引用該軟件包中的類時,使用默認軟件包時出現問題的模糊記憶。 – Oliver

+4

是的,除非你正在編寫丟棄代碼。 – aroth

+5

取決於你在做什麼。對於單類Java作業而言,它沒有問題。其他任何東西 - 只要把它放在一個命名包中,你就很安全。 –

回答

54

是的。理想情況下,軟件包名稱應該是全球唯一的,以避免命名衝突。使用默認包打破了這個約定。從默認包導入類也是不可能的。

爲什麼根本不存在未命名的軟件包,如果這是一個壞主意?從the JLS §7.4.2

Unnamed packages are provided by the Java platform principally for convenience when developing small or temporary applications or when just beginning development.

+1

......中剔除,直到其他人與你有相同的思路。使用命名包時有什麼問題? –

+0

@irreputable我喜歡你的邏輯。 – Michael

+3

...是的,但後來他們擔心像我這樣的人,所以他們都決定不使用它。 – irreputable

1

是的。問題是無法從默認包中導入類。

20

上有許多不同的層面的問題:

  • 你不能從沒有
  • 你會得到類裝入問題,如果你的類導入默認包中的類嘗試解決多個工件中的默認包
  • 您不能再像以前一樣使用默認和受保護的範圍
  • 沒有明顯的您的代碼與其他代碼的區別
3

是的。正如其他答案所述,您無法從默認包中加載類。

參見SO答案:

How to import a class from default package
How to access java-classes in the default-package?

然而,log4j的要求配置來位於默認包。這是保持在那裏合理的唯一的事情。

編輯:正如Sean Patrick Floyd和Michael在評論中指出的那樣,您可以將任何配置文件放入默認包中。感謝你們兩位向我指出這一點。

+3

不只是log4j config,許多類型的配置數據。但不是Java類 –

+0

Spring配置文件(applicationContext.xml)也經常在這裏。 – Michael

+1

@SeanPatrickFloyd它是這樣的評論,幫助我提高我的技能!謝謝。 –

相關問題