gpt4 book ai didi

java - 编译器不喜欢覆盖

转载 作者:行者123 更新时间:2023-11-30 08:44:17 26 4
gpt4 key购买 nike

我用的是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 extends Object declared in interface DisplayValueListener

谁能告诉我问题是什么以及为什么 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com