【问题标题】:overriding not liked by the compiler编译器不喜欢覆盖
【发布时间】:2015-11-21 17:34:57
【问题描述】:

我使用 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(Void,String) 覆盖了一个擦除方法与另一个方法相同的方法,但都没有覆盖另一个第一个方法:Widget 中的 setDisplayValue(Object,String) 第二种方法:DisplayValueListener 中的 setDisplayValue(P,String) 其中 P 是一个类型变量:P 扩展了在接口 DisplayValueListener 中声明的对象

谁能告诉我问题出在哪里以及为什么 Eclipse(相同的 jdk 6)中的编译器对此感到满意?

【问题讨论】:

    标签: java netbeans overriding jdk1.6


    【解决方案1】:

    重写方法时需要使用类Widget中的泛型参数P:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多