eclipse 3.4(ganymede)包与类型碰撞
我们有一个以例外结束的包
package abcexception;
我们的代码库在eclipse 3.3之前没有任何问题,但是当我们转移到eclipse 3.4时,它开始给出与这个包有关的错误:
"The package abcexception collides with a type"
当我将包名重构为abcexceptions时,没有问题。 这是由于eclipse 3.4中的错误还是有一些设置来纠正这种行为?
这是因为你在abc
包中有一个名为exception
(带有小写“e”)的类和一个名为abcexception
的包。
它导致名称冲突,因为如果你有代码abcexception.doSomething();
– 这是否意味着你想在abcexception
类中调用静态doSomething()
方法? 或者它是否意味着有一个名为abcexception.doSomething
的类,你试图调用它的构造函数?
坚持使用Java命名约定 – 将所有小写包装起来,以大写字母开头的类和以驼峰forms开头 – 你永远不会看到这个问题。
========== ==========编辑
这是出现此错误的唯一正当理由……
它不必直接在您的项目中,它可以在您的项目所依赖的另一个项目或库中。 这应该显示构建路径或项目中任何位置出现的类:在Eclipse工具栏中点击Flashlight查找按钮 – >选择’Java搜索’ – >在搜索字段中输入abcexception – >选择’区分大小写’ – >在“搜索”中选择“类型” – >确保为“搜索范围”选择了所有选项。
您使用的是生成类的任何工具吗? 他们可以将它们放入项目的构建目录中吗? 当您看到错误时,如果您转到项目的构建目录,然后进入a / b / c /目录,您会看到“exception”的.class文件吗?
当然Eclipse通常会有一个错误(虽然我希望Eclipse 3.4中会有一个bug报告,如果它是……你就能找到更多的抱怨),你的Eclipse安装可能会被打破方式(其他任何人都可以在Eclipse 3.4中打开你的项目吗?你能在另一个目录中安装一个干净的Eclipse 3.4吗?错误是否出现在那里?),或者你的项目可能会以某种方式混乱(创建一个没有依赖项的新项目)除了JDK之外,在新项目中创建abcexception包,在项目中创建一个类来import abcexception.*;
并查看是否发生错误。)。
在Java中,您不能拥有与包名称相同的类名。
这意味着JDT包必须仅在3.4中强制执行该规则
例如,请参阅错误63668 。
正如Nate评论:
名为Exception的类不会阻止您创建包exception 。
案件很重要 。还记得一个类的全名包括它所包含的包。
所以abSomeClass
(类名)与xySomeClass
(包名)不同。
这里没有名字冲突。类名和包名必须在case和package中匹配才会导致此错误。
看到他更准确的答案 。
我在我inheritance的巨大代码库中遇到了类似的问题。 事实certificate,冲突是由JavaDoc链接中的部分限定类名引起的。
换句话说,Eclipse在告诉我在编译abcdLondon时我有一个针对abcd的包/类型冲突。 对abcd代码进行java搜索后发现Eclipse认为abcParis中的JavaDoc注释是匹配的。 JavaDoc评论包含{@ link d.NewYork}。 当我将其更改为{@link abcdNewYork}时,编译错误已解决。
还应该注意的是,NewYork没有导入到Paris类中,因为它只出现在JavaDoc注释中。 这也使得它的缩写forms无法解析,点击评论中的链接不起作用。 使其成为绝对引用也使JavaDoc链接起作用。
我知道这听起来很傻,可能太简单了,但我通过以下方式解决了这个完全相同的错误信息:
- 删除导致错误消息的包名称的整行。
- 保存.java文件(这会在同一行触发一个新错误,说明“声明的包”“与预期的包”不匹配“),它应该这样做。
- 将原始包名重新键入同一行。
- 保存.java文件。
无法告诉你为什么这样有效,但确实如此,而Eclipse却不再当场发脾气。
安全打字和快速编码。
-Goodge
我改变了eclipse中的一个编译选项,问题就消失了。 在工作空间属性下:Java编译器 – >错误/警告 – >将“未使用的导入”从“警告”更改为“忽略”。
如果你有一个类Foo,你就不能有一个以Foo结尾的包,比如com.my.Foo。
此外,如果您使用maven样式,则您的项目中的资源类似于src / main / resources
资源中的文件夹也具有包样式,此外,您不能拥有包含类名称的文件夹。
根据推荐的约定开发Jenkins插件时,你肯定会遇到这个问题。
如果您遵循Jenkins约定,并且在包xy中名为MyBuilder的类中创建构建器,那么您还应该将.jelly放在名为xyMyBuilder的资源文件夹中。 这将导致上述问题。
但是,如果您将资源文件夹命名为xymyBuilder(请注意myBuilder中的小写’m’),与推荐的约定不同,该插件仍将按预期工作