对于这个源代码...
... Eclipse 报告以下错误:
只能导入一个类型。pkg.a 解析为一个包
...而 Sunsjavac
编译得很好。
如果我尝试像这样完全限定课程,pkg.a
类似的情况:
日食报告...
pkg.a 无法解析为类型
...而 Sunsjavac
编译得很好。
似乎 Eclipse 倾向于将标识符解释为包而不是类名,而 javac 则恰恰相反。那么,它是 Eclipse 还是 javac 中的错误?
(对语言规范的引用显然是一个加分项。)
对于这个源代码...
... Eclipse 报告以下错误:
只能导入一个类型。pkg.a 解析为一个包
...而 Sunsjavac
编译得很好。
如果我尝试像这样完全限定课程,pkg.a
类似的情况:
日食报告...
pkg.a 无法解析为类型
...而 Sunsjavac
编译得很好。
似乎 Eclipse 倾向于将标识符解释为包而不是类名,而 javac 则恰恰相反。那么,它是 Eclipse 还是 javac 中的错误?
(对语言规范的引用显然是一个加分项。)
这绝对是一个 Eclipse 错误:
简单名称可能出现在可能被解释为变量、类型或包的名称的上下文中。在这些情况下,§6.5 的规则指定将优先选择变量而不是类型,并且将优先选择类型而不是包。因此,有时可能无法通过其简单名称来引用可见类型或包声明。我们说这样的声明是模糊的。
明确的含义是类和包具有相同的名称是合法的。否则,JLS 会说隐藏包的类是非法的……而不是优先使用该类。
话虽如此,您遇到这种情况的唯一原因是您选择忽略 Java 的命名约定。不要期待太多的同情...
给类命名以大写字母开头并以小写字母开头的包是一种样式约定;那将解决您的问题。