包和类之间的名称冲突。 Eclipse或javac中的错误?

时间:2012-03-10 09:31:18

标签: java eclipse syntax name-clash

对于此源代码......

enter image description here

... Eclipse报告以下错误:

  

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

......而太阳队javac编译得很好。

如果我尝试完全符合pkg.a这样的课程,那么类似的情况:

enter image description here

Eclipse报告......

  

pkg.a无法解析为类型

......而太阳队javac编译得很好。


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

(对语言规范的引用显然是一个优点。)

2 个答案:

答案 0 :(得分:3)

这绝对是一个Eclipse错误:

  

6.4.2. Obscuring

     

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

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


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

答案 1 :(得分:1)

这是一个样式约定,为类提供一个以大写字母开头的名称和一个包含小写字母的包;这将解决你的问题。