Приведение 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

→ Ссылка