为什么Java没有“深入”的通配符导入?

时间:2013-12-13 21:42:44

标签: java import wildcard

为什么import one.two.*不包括import one.two.three.MyClass? Java不应该有类似import one.two.**的东西吗?或者是否有任何理由(除了他们没有做到,不是他们不能这样做)?

由于

2 个答案:

答案 0 :(得分:8)

Java不会将包视为真正的子类化;虽然java.utiljava.util.concurrency可能看起来像第二个是第一个的一部分,但它们被视为完全独立,而点主要是为了整洁。

这意味着您不需要害怕将您的类或接口命名为与以后在某个超级或子包中声明的另一个类相同的接口,这也意味着您应该只写一些额外的进口线。

正如Peter Lawrey解释的那样,这一决定背后的原因源于Java对简单性的普遍倾向。最佳做法通常是永远不要使用导入通配符。

答案 1 :(得分:4)

Java将每个包视为独立的。例如,package local不会扩展到任何“sub”包。我怀疑以有意义的方式使用层次结构是有价值的,但Java的设计是让一切尽可能简单。

  

或者是否有任何理由(除了他们没有做到,不是他们不能这样做)?

问题是向后兼容性可能会破坏旧程序。我怀疑这是可以解决的。

事实上,大多数IDE会为您管理您的导入,我甚至不再查看我的导入。当然,最好避免使用import *,以便明确导入所有类。