2013-12-13 53 views
5

爲什麼不import one.two.*包括import one.two.three.MyClass? Java不應該有像import one.two.**?或者有什麼理由(除了他們沒有做,不是他們做不到)?爲什麼Java沒有「深」通配符導入?

謝謝

+0

我甚至不使用單層包裝*如果我是誠實的,因爲這是我的IDE放入它的方式,但它確實使類更清晰 –

回答

8

Java並未將包視爲真正的子類對象;而java.utiljava.util.concurrency可能看起來像第二個不知何故是第一個的一部分,他們被視爲完全獨立,點主要是爲了整潔。

這意味着您不必擔心將您的類或接口命名爲與稍後某個超級包或子包中聲明的另一個類相同的接口,也意味着您應該只寫一對額外的進口線。正如Peter Lawrey解釋的,這一決定背後的原因源於Java對簡單性的總體傾向。最好的做法是永遠不要使用導入通配符。

4

Java將每個軟件包視爲獨立軟件包。例如,本地軟件包不會擴展到任何「子」軟件包。我懷疑以有意義的方式使用層次結構是有價值的,但Java的設計是儘可能簡化所有內容。

還是有什麼理由(除了他們沒有做,不是他們做不到)?

問題是向後兼容性可能會破壞較舊的程序。我懷疑這是可以解決的。

事實上,大多數IDE爲您管理您的進口,我甚至不再看我的進口。當然最好避免import *,以便所有類都顯式導入。