2009-09-08 43 views
2

关于Java泛型的stackoverflow已经有一些讨论,但我太笨了,无法解决这个特定的问题。我在一个项目中定义了一个接口,并在另一个接口中实现了它。他们在不同的包裹。编译器会在某些工作区中执行此操作:如果使用具有泛型参数的方法的接口,Eclipse会抱怨名称冲突

名称冲突: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的一些问题?

+0

供参考:如果问题有一个确定的答案(我认为这个问题确实如此),它不应该成为一个社区维基。 – 2009-09-08 15:27:30

+0

谢谢,我在这里是一个新手,我还没有掌握这个论坛维基引擎。我可以撤销这个选项吗? – wigy 2009-09-08 15:37:24

+0

是的,请更改它,因为没有人回答社区维基百科回答问题 – 2009-09-08 15:37:30

回答

3

没有解决办法,但一些技巧和测试:

  1. 清洁所有的工作区中的项目,这与Eclipse有时帮助基于问题
  2. 确保,你只对类文件“HighlightingStyle” 。也许,实现从不同的源/类加载器中获取HighlightingStyle。也许在类路径中有一个库,其中包含枚举和/或接口
  3. 重命名枚举并检查,如果重构更改接口和实现中的名称。

希望它有助于解决您的问题..

编辑

没有正确地得到,它工作在一些工作区。所以我敢肯定,这是一个工作区配置问题,甚至可能是一个错误。此时,我个人不会继续解决这个问题,而只是将所有项目压缩到单个压缩文件中,移动或重命名整个工作空间,创建一个新文件(同名,原始位置)并导入所有已归档的项目。如果没有问题,请删除移动或重命名的工作区。

当然,你松动你的工作区设置,我不能告诉,如果这是你的情况的问题。我之前在某些场合做过(我有一个关于subversion和mercurial插件的丑陋问题......),这很容易。

+0

检查所有3个建议没有成功。干净没有帮助,我在所有项目中都有一个名为HighlightingStyle的类,重命名重构会影响所有代码。未编译的工作空间仍然无法编译。编译过的工作区仍在编译。 – wigy 2009-09-08 16:28:08

+0

我使用任何方法设置的任何新工作区:它们都可以工作。我试图隔离导致旧工作区中问题的设置 - 没有成功。感谢您的善意帮助,最初我不确定源代码是否正常。 – wigy 2009-09-08 18:13:10

1

我发现为了问题的目的,类定义被明确修改。那些采取参数化类型,而你没有使用它?如果是的话,那可以解释这个问题。我有一个similar problem,这是根本原因。

+0

是的,代码被简化以进行测试。不,原来的课程不是通用的。 我的基本目标是定义一个接口,其中一个方法可以接受来自给定枚举类型的一组值。非常类似于C++中的位域或C#中[Flags]属性的枚举。我只是没有足够的Java 1.5经验来表达,如果没有遇到问题 – wigy 2009-09-08 17:39:30

+0

@wigy,您可以发布确实存在问题的真实方法签名吗?这可能是一个泛型问题,您需要在正确位置使用extends或者一个类型参数,而您的接口和实现定义了两种不同的泛型类型。泛型不是co变体,所以它可能看起来应该起作用,但不起作用。 – Yishai 2009-09-08 18:10:46

+0

我没有更改突出显示方法的签名。这在原始代码中确实是一样的。对于涉及的类没有类型参数。当我用相同的代码重新创建工作区时,没有编译错误,所以在我看来,这是一些配置问题或Eclipse错误。 – wigy 2009-09-08 18:34:32

0

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

相关问题