eclipse 3.4(ganymede)包与类型碰撞

Mon*_*bal 4 java types eclipse-3.4 package collision

我们有一个以例外结束的包

package a.b.c.exception;
Run Code Online (Sandbox Code Playgroud)

我们的代码库在eclipse 3.3之前没有任何问题,但是当我们转移到eclipse 3.4时,它开始给出与此包相关的错误:

"The package a.b.c.exception collides with a type"
Run Code Online (Sandbox Code Playgroud)

当我将包名重构为abcexceptions时,没有问题.这是由于eclipse 3.4中的错误还是有一些设置来纠正这种行为?

Nat*_*ate 7

这是因为你有一个名为exception(带有小写"e")的类a.b.c和一个名为的包a.b.c.exception.

它导致名称冲突,因为如果你有代码a.b.c.exception.doSomething();- 这是否意味着你想doSomething()a.b.c.exception类中调用静态方法?或者它是否意味着有一个叫做a.b.c.exception.doSomething你试图调用构造函数的类?

坚持使用Java命名约定 - 将所有小写包装起来,以大写字母开头的类和以驼峰形式开头 - 你永远不会看到这个问题.

========== ==========编辑

这是出现此错误的唯一正当理由......

它不必直接在您的项目中,它可以在您的项目所依赖的另一个项目或库中.这应该显示构建路径或项目中任何位置出现的类:在Eclipse工具栏中点击Flashlight查找按钮 - >选择'Java搜索' - >在搜索字段中输入abcexception - >选择'区分大小写' - >在"搜索"中选择"类型" - >确保为"搜索范围"选择了所有选项.

您使用的是生成类的任何工具吗?他们可以将它们放入项目的构建目录中吗?当您看到错误时,如果您转到项目的构建目录,然后进入a/b/c /目录,您会看到"异常"的.class文件吗?

当然Eclipse通常会有一个错误(虽然我希望Eclipse 3.4中会有一个错误报告,如果它是......你就能找到更多的抱怨),你的Eclipse安装可能会被打破方式(其他人可以在Eclipse 3.4中打开你的项目吗?你能在另一个目录中安装一个干净的Eclipse 3.4吗?错误是否出现在那里?),或者你的项目可能会以某种方式混乱(创建一个没有依赖项的新项目)除了JDK之外,在新项目中创建abcexception包,在项目中创建一个类import a.b.c.exception.*;并查看是否发生错误.).


Mon*_*bal 0

我更改了eclipse中的编译选项之一,问题就消失了。在工作区属性下:Java 编译器 -> 错误/警告 -> 将“未使用的导入”从“警告”更改为“忽略”。