如果实现了具有泛型参数的方法的接口,则Eclipse会抱怨名称冲突

时间:2009-09-08 15:23:21

标签: java eclipse generics

关于Java泛型的stackoverflow已经有一些讨论,但我太愚蠢了,无法解决这个特定的问题。我在项目中定义了一个接口,并在另一个接口中定义了它。它们有不同的包装。编译器在某些工作空间中抱怨:而不是实现该方法:

名称冲突:SuperDuperHighlightable类型的方法高亮显示(EnumSet,int,int)与IHighlightable类型的高亮显示(EnumSet,int,int)具有相同的删除,但不会覆盖它

相同的代码不会在其他工作区中抱怨,我找不到相关的差异。所有项目和工作区都使用JRE SE 1.5。

HighlightingStyle.java

package org.my.api;

public enum HighlightingStyle {
 NONE, FIELD, SELECTION, TEST
}

IHighlightable.java

package org.my.api;

import java.util.EnumSet;
import javax.swing.text.BadLocationException;

public interface IHighlightable {
   void highlight(EnumSet<HighlightingStyle> style, int start, int length)
     throws BadLocationException, IllegalArgumentException;
}

实现:

package org.my.impl;

import java.util.EnumSet;
import javax.swing.text.BadLocationException;
import org.my.api.HighlightingStyle;
import org.my.api.IHighlightable;

public class SuperDuperHighlightable implements IHighlightable {

 public void highlight(EnumSet<HighlightingStyle> styleSet, int start, int length)
   throws BadLocationException, IllegalArgumentException {
  for (HighlightingStyle style : styleSet) {
   DoSomething(style, start, length);
  }
 }

 private void DoSomething(HighlightingStyle style, int start, int length) {
  // TODO Auto-generated method stub

 }

}

如果这是源代码问题,工作区问题或Eclipse出现问题,您有什么见解吗?

3 个答案:

答案 0 :(得分:3)

还没有解决方案,但有一些提示和测试:

  1. 清理工作区中的所有项目,这有时会导致基于eclipse的问题
  2. 确保您只在classfile'HighlightingStyle'上。也许,实现从不同的源/类加载器获取HighlightingStyle。也许在类路径上有一个包含枚举和/或接口的库
  3. 重命名枚举并检查重构是否在界面和实现中更改了名称。
  4. 希望它有助于解决您的问题..

    修改

    没有正确,它在某些工作区中有效。所以我敢肯定,这是一个工作区配置问题,甚至可能是一个bug。此时,我个人不会继续修复该问题,只是将所有项目压缩成单个存档,移动或重命名整个工作区,创建一个新工作区(相同名称,原始位置)并导入所有存档项目。如果没有问题,请删除已移动或重命名的工作区。

    当然,您丢失了工作区设置,我无法判断,如果这是您的问题。我以前在某些情况下做过(我有一个关于颠覆和mercurial插件的丑陋问题....)而且这很容易。

答案 1 :(得分:1)

我看到为了问题的目的,明确地修改了类定义。其中任何一个采用参数化类型而你没有使用它?如果是,那么这可以解释问题。我有similar problem,这是根本原因。

答案 2 :(得分:0)

也遇到了这个问题。我终于通过删除和阅读项目来修复它。不要删除磁盘上的内容。