Хочу объединить 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 недовольна? Как можно переписать нормально? :)