java - 编译器不喜欢重写

标签 java netbeans overriding java-6

我使用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 接口(interface)中声明的对象

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

最佳答案

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

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

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

关于java - 编译器不喜欢重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33846459/

相关文章:

java - 在 java 中重写父类(super class)的父类(super class)中的方法?

c# - 是否可以覆盖隐藏的方法?

java play 框架覆盖注释失败,java.source=1.6

java - 有没有等同于 Boost::Python for Java 的东西?

java - 在 Netbeans 8.2 中向 jList 添加元素

java - 找不到 JSP Googlemaps taglib,我哪里出错了?

java - jtextfield 不检索从组合框中选取的值

java - Swagger注解为响应类添加json示例

java - 注入(inject)任务的 EJB 返回 UnsatisfiedResolutionException

java - 字符串格式和日志记录基元类型 - Java