我有一个合乎逻辑的问题:为什么我不能从 java 中的所有包中导入所有包?例如,我可以从 java.awt 导入所有类:
import java.awt.*;
但以下是不可能的:
import java.awt.*.*;
我的目标是从 awt.image 和 awt.event 等导入所有东西。还有另一种方法可以做到这一点吗?
谢谢!
没有办法import a.package.*.*;
在 Java 中实现。JLS 第 7.5 节指定了仅有的 4 种合法进口类型:
单一类型导入声明(第 7.5.1 节)通过提及其规范名称(第 6.7 节)来导入单个命名类型。
例如import java.util.List;
按需类型导入声明(第 7.5.2 节)通过提及类型或包的规范名称,根据需要导入命名类型或命名包的所有可访问类型(第 6.6 节)。
例如import java.awt.*;
单静态导入声明(第 7.5.3 节)通过给出其规范名称,从一个类型中导入所有具有给定名称的可访问静态成员。
例如import static org.junit.Assert.assertEquals;
按需静态导入声明(第 7.5.4 节)通过提及类型的规范名称,根据需要导入命名类型的所有可访问静态成员。
例如import static org.junit.Assert.*;
包允许单独引用同名的类。例如有java.awt.List
和java.util.List
。什么会阻止某人使用java.*.*;
. 那怎么List
解决呢?会有太多的歧义。
不,使用通配符导入通常是不好的风格,因为它会使您的代码更难阅读。
使用通配符导入的一些缺点:
编辑:似乎导入比需要更多的类不会导致任何庞大的代码,但我仍然希望明确导入类以清楚地了解我正在使用的内容。