Приведение generics типов в Java
Задача сделать универсальный метод который выводит в консоль каждый элемент любого List с любым generic, почему не один вариант не компилируется ?
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1,2,3,4,5);
List strs = Arrays.asList("abc", "zxc", "fgh");
showList((ArrayList<Object>) nums);
showList(List<Object> nums);
showList((Object)strs);
}
static void showList(ArrayList<Object> list) {
list.forEach(System.out::println);
}
static void showList(List<? extends Object> list) {
list.forEach(System.out::println);
}
Ответы (2 шт):
Автор решения: Вадим
→ Ссылка
так как поставленной задачи нету, немного не понятно для чего вы хотите произвести такую конвертацию, для того чтобы просто печатать элементы вам достаточно оставить метод:
static void showList(List<? extends Object> list) {
list.forEach(System.out::println);
}
Или даже
static void showList(List<?> list) {
list.forEach(System.out::println);
}
А вызывать его:
showList( nums);
showList( strs);
Для более точного понимания рекомендую почитать про wildcards и принцип PECS
Если же вы хотите конвертировать элементы списка из одного типа в другой, тогда воспользуйтесь stream API и метод map
Автор решения: Tatyana Milkina
→ Ссылка
Попробуйте такой вариаант:
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1,2,3,4,5);
List strs = Arrays.asList("abc", "zxc", "fgh");
showList(nums);
showList(strs);
}
static void showList(List<?> list) {
list.forEach(System.out::println);
}
Что такое принцип PECS в Java? - Здесь есть описание PECS