从Sun的JVM实现中查看some source code时,我遇到了晦涩的import
语法。
import java.awt;
从源代码看,这个import
语句似乎是导入整个java.awt
包,但标准是使用包通配符:import java.awt.*;
。但是,import
中ComponentFactory
语句的语法无效,不能使用JDK或Eclipse进行编译。
为什么Java开发人员会使用这种不可编译的语法,而不是正确的.*
语法? (也许开发人员使用支持这种语法的不同编译器?)
答案 0 :(得分:4)
看了最新的JLS (http://docs.oracle.com/javase/specs/jls/se7/html/jls-7.html#jls-7.5.1)后,它说:
例7.5.1-3。没有导入子包
请注意,导入语句不能导入子包,只能导入类型。
例如,尝试导入java.util然后使用它不起作用 名为util.Random的名称,用于引用java.util.Random:
类型import java.util; // incorrect: compile-time error class Test { util.Random generator; }
语言设计者没有理由使用不同版本的Java。他们可能有一些秘密工具用于编码和测试,他们也可能会测试一些新功能(但我不认为这是一个新功能,因为新功能不应该像这样发布而没有任何描述)
我认为HTML格式会自动消除导入声明的所有.*
部分。
答案 1 :(得分:1)
根据Oracle发布的some documentation:
注意:另一种不太常见的导入形式允许您导入 封闭类的公共嵌套类。例如,如果 graphics.Rectangle类包含有用的嵌套类,例如 Rectangle.DoubleWide和Rectangle.Square,你可以导入Rectangle 和它的嵌套类使用以下两个语句。
import graphics.Rectangle; import graphics.Rectangle.*;
请注意,第二个import语句不会导入Rectangle。
然而,在尝试导入java.awt
之后,我意识到这不是有效的语法,因为它只是一个包而不是一个类。这让我相信他们发布的代码在大多数导入之后都会省略.*
,以使代码看起来更清晰。无论如何,你不能写这样的进口。