Java:泛型在Eclipse和javac中处理差异
说我们有课
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);
}
我在ConcreteEntry
代码的某个地方使用了doSomething()
方法
然后Eclipse编译器说OK并生成代码,不显示任何警告
但是javac
反应:
...ConcreteEntry.java:6 types ...ExtendedEntry and ...ExtendedEntry are incompatible: both define getKey() method, but unrelated return types
当我将(删除泛型类型)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
中编译
# 1 楼答案
问题Where does Eclipse find javac to compile a project?中已经解释了部分问题——Eclipse使用不同的编译器