将列表复制到 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 的另一个子类型)。
我正在尝试创建一种方法尽可能通用,以将列表复制到列表的列表中。我试过这个:
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 的另一个子类型)。