【发布时间】:2013-04-09 17:28:35
【问题描述】:
这对我来说看起来很奇怪。谁能解释一下?
注意,代码从不使用“?extends”,只使用“?super E”,但出于某种特殊原因编译器 提出“?扩展”。
import java.util.Comparator;
public class TestClass <E> {
private Comparator<? super E> compNatural = new Comparator<E>() {
@SuppressWarnings("unchecked")
@Override
public int compare(E lhs, E rhs) {
return ((Comparable<E>)lhs).compareTo(rhs);
}
};
private Comparator<? super E> comp;
public TestClass(Comparator<? super E> comp) {
// Reports an error:
// Type mismatch: cannot convert from Comparator<capture#10-of ? extends Object> to Comparator<? super E>
this.comp = (comp==null) ? compNatural : comp;
// The following compiles OK!!!
if (comp==null) this.comp = compNatural; else this.comp = comp;
}
}
【问题讨论】:
-
这不是重复。见下面的cmets
-
这个问题通常发生在泛型上,所以只需使用第二个编译选项(并且可能有效)