Java泛型字段

3

我看不到我的错误,也不明白为什么它不起作用。我有以下类:

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。类型不兼容。


什么是泛型类?哪一行是确切的错误行? - LHA
5
错误出现在method1()和method2()中。我无法将工厂方法的结果赋给mList字段,因为它们的类型不兼容。这是无法避免的问题。例如,考虑List<? extends Comparable> comparables = new ArrayList<Integer>();,由于列表支持任何可比较类型,你可以向其中添加字符串或任何其他可比较元素,但编译器不能保证安全。 - Luiggi Mendoza
1
可能是Java嵌套泛型类型的重复问题。 - Radiodef
2
你要找的声明是 List<? extends Generic<?>> mList;,但请注意通配符将不允许您轻松进行比较。 - Radiodef
显示剩余6条评论
2个回答

1

如评论中所述-要使您的代码正常工作,您需要更改类Another中的以下声明

private List<Generic<? extends Comparable>> mList;

收件人:

List<? extends Generic<?>> mList;

0
private void method2() {
    mList = (List) Generic.factory2();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接