这对我来说看起来很奇怪。有人可以解释一下吗?
请注意,代码从不使用“?extends”,只使用“?super E”,但由于某些特殊原因,编译器会使用“?extends”。
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;
}
}