编译器不喜欢覆盖
overriding not liked by the compiler
我用jdk6.
我有一个接口:
public interface DisplayValueListener<P> {
...
void setDisplayValue(P value, String reprValue);
}
我有一个名为 Widget 的抽象 class 实现了 DisplayValueListener 并且声明如下:
public abstract class Widget<P> implements DisplayValueListener<P> {
...
@Override
public void setDisplayValue(final Object value, final String reprValue) {
...
}
}
我还有另一个抽象 class 像这样扩展 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)对此感到满意吗?
覆盖方法时需要在classWidget中使用泛型参数P:
@Override
public void setDisplayValue(final P value, final String reprValue) {
...
}
Eclipse 使用自己的 Java 编译器而不是 javac,有时这两个编译器对 Java 规范的解释不同。
我用jdk6.
我有一个接口:
public interface DisplayValueListener<P> {
...
void setDisplayValue(P value, String reprValue);
}
我有一个名为 Widget 的抽象 class 实现了 DisplayValueListener 并且声明如下:
public abstract class Widget<P> implements DisplayValueListener<P> {
...
@Override
public void setDisplayValue(final Object value, final String reprValue) {
...
}
}
我还有另一个抽象 class 像这样扩展 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)对此感到满意吗?
覆盖方法时需要在classWidget中使用泛型参数P:
@Override
public void setDisplayValue(final P value, final String reprValue) {
...
}
Eclipse 使用自己的 Java 编译器而不是 javac,有时这两个编译器对 Java 规范的解释不同。