4

对于这个源代码...

在此处输入图像描述

... Eclipse 报告以下错误:

只能导入一个类型。pkg.a 解析为一个包

...而 Sunsjavac编译得很好。

如果我尝试像这样完全限定课程,pkg.a类似的情况:

在此处输入图像描述

日食报告...

pkg.a 无法解析为类型

...而 Sunsjavac编译得很好。


似乎 Eclipse 倾向于将标识符解释为包而不是类名,而 javac 则恰恰相反。那么,它是 Eclipse 还是 javac 中的错误?

(对语言规范的引用显然是一个加分项。)

4

2 回答 2

3

这绝对是一个 Eclipse 错误:

6.4.2. 遮蔽

简单名称可能出现在可能被解释为变量、类型或包的名称的上下文中。在这些情况下,§6.5 的规则指定将优先选择变量而不是类型,并且将优先选择类型而不是包。因此,有时可能无法通过其简单名称来引用可见类型或包声明。我们说这样的声明是模糊的。

明确的含义是类和包具有相同的名称是合法的。否则,JLS 会说隐藏包的类是非法的……而不是优先使用该类。


话虽如此,您遇到这种情况的唯一原因是您选择忽略 Java 的命名约定。不要期待太多的同情...

于 2012-03-10T10:45:26.907 回答
1

给类命名以大写字母开头并以小写字母开头的包是一种样式约定;那将解决您的问题。

于 2012-03-10T10:24:05.810 回答