我看不到我的错误,也不明白为什么它不起作用。我有以下类:
public class Generic<K extends Comparable<K>> implements Comparable<Generic<K>> {
// code
public static List<Generic<String>> factory1(){...}
public static List<Generic<Integer>> factory2(){...}
private K mKey;
@Override
public int compareTo(NoteGroup<K> another) {
return mKey.compareTo(another.mKey);
}
}
在另一个类中,我不关心泛型类型,并想使用通配符,例如:
public class Anothter {
private List<Generic<? extends Comparable>> mList;
private void method1() {
mList = Generic.factory1();
}
private void method2() {
mList = Generic.factory2();
}
}
但是这并不起作用。错误消息是,需要扩展Comparable类型而不是String / Integer。
我该怎么解决我的问题?为什么我不能编译上面的代码片段?
编辑:错误出现在method1()和method2()中。我无法将工厂方法的结果分配给字段mList。类型不兼容。
List<? extends Comparable> comparables = new ArrayList<Integer>();
,由于列表支持任何可比较类型,你可以向其中添加字符串或任何其他可比较元素,但编译器不能保证安全。 - Luiggi MendozaList<? extends Generic<?>> mList;
,但请注意通配符将不允许您轻松进行比较。 - Radiodef