我使用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规范的解释不同。