将列表复制到 Java 中的列表列表的通用方法

Generic method to copy a list into a list of lists in Java

我正在尝试创建一种方法尽可能通用,以将列表复制到列表的列表中。我试过这个:

public static <E> void addToMatrix(List<E> list, List<List<? extends E>> matrix) {
    matrix.add(list);
}

下面是我用来测试的主要方法:

public static void main(String[] args) {
    List< List<? extends Number> > matrix = new ArrayList<>();
    List<Integer> list = new ArrayList<>(); 

    addToMatrix(list, matrix);
}

为什么不起作用? 我怎样才能在不改变方法逻辑的情况下以正确的方式做到这一点?

您还可以将方法定义更改为:

public static <E> void addToMatrix(List<? extends E> list, List<List<? extends E>> matrix) {
    matrix.add(list); 
}

因为 List<E>add API 需要参数 E e,在你的例子中是 list 类型 List<? extends E>

我认为最通用的做法是这样的(在第一个 List 参数中将 "E" 替换为“? extends E”):

public static <E> void addToMatrix(List<? extends E> list, List<List<? extends E>> matrix)
{
    matrix.add(list);
}

这会编译并允许您的方法接受 E 的任何子类型(包括 Integer 和 Number 的另一个子类型)。