【发布时间】:2013-12-13 21:42:44
【问题描述】:
为什么import one.two.* 不包含import one.two.three.MyClass?
Java不应该有import one.two.**之类的东西吗?还是有什么原因(除了他们没有做,而不是他们做不到)?
谢谢
【问题讨论】:
-
我什至不使用单层包。* 老实说,这是我的 IDE 将它们放入的方式,但它确实使类的来源更清晰
为什么import one.two.* 不包含import one.two.three.MyClass?
Java不应该有import one.two.**之类的东西吗?还是有什么原因(除了他们没有做,而不是他们做不到)?
谢谢
【问题讨论】:
Java 并不将包视为真正的子类;虽然 java.util 和 java.util.concurrency 可能看起来第二个在某种程度上是第一个的一部分,但它们被视为完全独立,并且点主要是为了整洁。
这意味着您不必害怕将您的类或接口命名为与以后在某个超级包或子包中声明的另一个相同,这也意味着您真的应该多写几个导入行。
正如 Peter Lawrey 所解释的,这一决定背后的原因源于 Java 普遍倾向于简单。最佳做法通常是永远不要使用导入通配符。
【讨论】:
Java 将每个包视为独立的。例如,本地包不会扩展到任何“子”包。我怀疑以有意义的方式使用层次结构会很有价值,但 Java 的设计是让一切尽可能简单。
或者有什么原因(除了他们没有做,而不是他们做不到)?
问题在于向后兼容性,这可能会破坏旧程序。我怀疑这是可以解决的。
事实上,大多数 IDE 会为您管理导入,而我什至不再查看我的导入。当然最好避免使用import *,以便显式导入所有类。
【讨论】: