说我们有课
public class Entry<K, V> {
public Entry(K k,V v) {
mKey = k;
mValue = v;
}
public K getKey() {
return mKey;
}
public V getValue() {
return mValue;
}
...
}
然后我们编写一个扩展类,例如:
public class ExtendedEntry<K extends SomeSpecificKey, V> extends Entry<K, V>
然后,层次结构中又多了一个类:
public class ConcreteEntry<Option extends Something, K extends MoreSpecificKey<Option>, V> extends ExtendedEntry<K, V>
MoreSpecificKey
here:
public interface MoreSpecificKey<OptionType extends Something> extends SomeSpecificKey {
public void doSomething(OptionType option);
}
我用doSomething()
代码中某处的方法ConcreteEntry
.
然后 Eclipse 编译器显示“OK”并构建代码并且不显示任何警告。
But javac
回应:
...ConcreteEntry.java:6 种类型 ...ExtendedEntry 和 ...ExtendedEntry 不兼容:都定义了 getKey() 方法,但返回类型不相关
当我改变时(删除通用类型)MoreSpecificKey
to:
public interface MoreSpecificKey extends SomeSpecificKey {
public <OptionType extends Something> void doSomething(OptionType option);
}
ConcreteEntry
现在的定义:
public class ConcreteEntry<Option extends Something, K extends MoreSpecificKey, V> extends ExtendedEntry<K, V>
错误于javac
消失了,一切都编译好了。
那么,Eclipse 编译这样的代码的原因是什么——是定义的编译器参数还是不同的首选项,或者编译器的差异。在 Eclipse 中开发时如何处理(修复)这个问题并确保它能够编译javac
.