编译器不喜欢重写



我使用jdk 6。

我有一个接口:

    public interface DisplayValueListener<P>  {
         ...
         void setDisplayValue(P value, String reprValue);
    }

我有一个名为Widget的抽象类,它实现DisplayValueListener,声明如下:

    public abstract class Widget<P> implements DisplayValueListener<P> {
        ...
        @Override
        public void setDisplayValue(final Object value, final String reprValue) {
            ...
        }
    }

我还有另一个扩展Widget的抽象类:

    public abstract class CameraWidget extends Widget<Void> {
        ...
        @Override
        public void setDisplayValue(final Void value, final String reprValue) {
        }
    }

这是我从NetBeans:中的编译器得到的消息

名称冲突:CameraWidget中的setDisplayValue第二种方法:DisplayValueListener中的setDisplayValue(P,String)其中P是类型变量:P扩展DisplayValueListener 接口中声明的Object

有人能告诉我问题出在哪里吗?为什么Eclipse中的编译器(同样是jdk6)对此感到满意?

重写方法时,需要在类Widget中使用通用参数p:

 @Override
 public void setDisplayValue(final P value, final String reprValue) {
     ...
 }

Eclipse使用自己的Java编译器,而不是javac,有时这两个编译器对Java规范的解释不同。

相关内容

  • 没有找到相关文章

最新更新