模糊Java导入语法?

时间:2013-01-31 03:54:08

标签: java syntax import

从Sun的JVM实现中查看some source code时,我遇到了晦涩的import语法。

import java.awt;

从源代码看,这个import语句似乎是导入整个java.awt包,但标准是使用包通配符:import java.awt.*;。但是,importComponentFactory语句的语法无效,不能使用JDK或Eclipse进行编译。

为什么Java开发人员会使用这种不可编译的语法,而不是正确的.*语法? (也许开发人员使用支持这种语法的不同编译器?)

2 个答案:

答案 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之后,我意识到这不是有效的语法,因为它只是一个包而不是一个类。这让我相信他们发布的代码在大多数导入之后都会省略.*,以使代码看起来更清晰。无论如何,你不能写这样的进口。