我正在尝试创建尽可能通用的方法,以将列表复制到列表列表中。我已经尝试过这个了:
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);
}
为什么它不起作用? 如何在不更改方法逻辑的情况下以适当的方式执行此操作?
答案 0 :(得分:1)
我认为您可以使它最通用(在第一个List参数中将“ E”替换为“?extends E”):
public static <E> void addToMatrix(List<? extends E> list, List<List<? extends E>> matrix)
{
matrix.add(list);
}
这将编译并允许您的方法接受E的任何子类型(包括Integer和Number的另一个子类型)。
答案 1 :(得分:0)
您还可以将方法定义更改为:
public static <E> void addToMatrix(List<? extends E> list, List<List<? extends E>> matrix) {
matrix.add(list);
}
因为add
的{{1}} API期望使用参数List<E>
,在您的情况下该参数为类型E e
的{{1}}。