Общий метод для копирования списка в список списков в Java - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь создать метод как можно более универсальный для копирования списка в список списков.Я пробовал с этим:

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);
}

Почему он не работает?Как я могу сделать это правильно, не меняя логику метода?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Я думаю, что самое общее, что вы можете сделать, это так (замените "E" на "? Extends E" в первом параметре List):

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

Это компилирует и позволяет вашему методу приниматьлюбые подтипы E (включая Integer и другой подтип числа).

0 голосов
/ 25 ноября 2018

Вы также можете изменить определение метода на:

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

, поскольку API add для List<E> ожидает аргумент E e, который в вашем случае равен list типа List<? extends E>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...