Java导入所有

时间:2013-10-18 19:23:42

标签: java import packages

我有一个逻辑问题:为什么我无法从java中的所有包中导入所有包? 例如,我可以从java.awt导入所有类:

import java.awt.*;

但以下是不可能的:

import java.awt.*.*;

我的目标是从awt.image和awt.event等导入所有内容。 还有另一种方法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

无法在Java中实现import a.package.*.*;JLS, Section 7.5指定了合法的仅有4种类型的导入:

  

单一类型导入声明(第7.5.1节)导入单个命名类型,   通过提及其规范名称(§6.7)。

e.g。 import java.util.List;

  

按需输入类型声明(第7.5.2节)导入所有   根据需要,命名类型或命名包的可访问类型(第6.6节)   提到类型或包的规范名称。

e.g。 import java.awt.*;

  

单静态导入声明(第7.5.3节)导入所有可访问的声明   具有给定名称的静态成员,通过赋予其规范   名。

e.g。 import static org.junit.Assert.assertEquals;

  

静态导入按需声明(第7.5.4节)导入所有可访问的声明   通过提到规范,可以根据需要使用命名类型的静态成员   类型的名称。

e.g。 import static org.junit.Assert.*;

包允许单独引用相同名称的类。例如。有java.awt.Listjava.util.List。什么会阻止某人使用java.*.*;导入所有内容。那么List将如何解决?会有太多歧义。

答案 1 :(得分:2)

不,并且使用通配符导入通常是不好的样式,因为它会使您的代码更难阅读。

答案 2 :(得分:0)

使用通配符导入的一些缺点:

  1. 包含您可能根本不使用的类的结果。不清楚你正在使用的是什么。
  2. 更广泛的范围被认为是糟糕的编程实践。
  3. 最重要的是可能导致命名空间冲突。如果您公然从两个包中导入所有内容,则可能会导致两个具有相同名称的类在不同包中发生冲突。
  4. 编辑:似乎导入比所需更多的类不会导致任何庞大的代码,但我仍然希望明确导入类以清楚地了解我正在使用的内容。