Задать вопрос

Lambda + Wild Card, работа со списками?

Хочу объединить 2 списка и вернуть новый не изменяя их с помощью лямбда выражения:
interface  CombineLists{
    List<Number> combine(List<? extends Number> a, List<? extends Number> b);
}

public class SimpleTest {
    public static void main(String[] args) {
        CombineLists concLists = (a, b) -> {
                List<Number> newL = new ArrayList<>();
                newL.addAll(a);
                newL.addAll(b);
            return newL;
        };

        List<Integer> m1 = Arrays.asList(1,2,3,4);

        List<Double> m2 = Arrays.asList(5.0,6.0,7.0,8.0);

        System.out.println(concLists.combine(m1,m2));
        
    }
}


Всё работает, но мне не нравится что приходится дублировать в параметрах ? extends Number. Пробывал заменить на:
interface  CombineLists<T extends Number>{
    List combine(List<T> a, List<T> b);
}

Но почему-то подсвечивает строки добавления: Unchecked assignment: java.util.List' to java.util.Collection ? extends java.lang.Number и саму строку вызова метода: Unchecked call to combine(List, List) as a member of raw type Practice.Lambdas.CombineLists. Хотя всё работает. Значения в списке ведь не могут быть другого типа кроме как Number и его потомков поэтому нету смысла в проверке, тогда в чём дело? почему ide недовольна? Как можно переписать нормально? :)
  • Вопрос задан
  • 107 просмотров
Подписаться 3 Простой 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы