有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案