-1
这对我来说很奇怪。有人可以解释吗?这里有什么不对
请注意,代码从不使用“?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;
}
}
这不是重复。看到下面的注释 – cyanide 2013-04-08 07:19:18
这个问题一般发生在泛型中,所以只需使用编译的第二个选项(可能工作) – 2013-04-08 12:01:11