我有一个逻辑问题:为什么我无法从java中的所有包中导入所有包? 例如,我可以从java.awt导入所有类:
import java.awt.*;
但以下是不可能的:
import java.awt.*.*;
我的目标是从awt.image和awt.event等导入所有内容。 还有另一种方法吗?
谢谢!
答案 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.List
和java.util.List
。什么会阻止某人使用java.*.*;
导入所有内容。那么List
将如何解决?会有太多歧义。
答案 1 :(得分:2)
不,并且使用通配符导入通常是不好的样式,因为它会使您的代码更难阅读。
答案 2 :(得分:0)
使用通配符导入的一些缺点:
编辑:似乎导入比所需更多的类不会导致任何庞大的代码,但我仍然希望明确导入类以清楚地了解我正在使用的内容。