说我们有课
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
此处:
public interface MoreSpecificKey<OptionType extends Something> extends SomeSpecificKey {
public void doSomething(OptionType option);
}
我在doSomething()
的代码中使用了ConcreteEntry
方法。
然后Eclipse编译器说OK并构建代码并且没有显示警告。
但javac
回复:
... ConcreteEntry.java:6类型... ExtendedEntry和... ExtendedEntry不兼容:既定义了getKey()方法,又定义了不相关的返回类型
当我将(删除泛型类型)MoreSpecificKey
更改为:
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
中编译。
答案 0 :(得分:4)
部分问题已在问题Where does Eclipse find javac to compile a project?中解释 - Eclipse使用不同的编译器