перегрузка метода, что будет выполняться

Подскажите пожалуйста почему выполняется второй метод (хотя он стринговый), и при компиляции ругается на преобразование:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

Код:

    public static void main(String[] args) {
        List<Integer> integerList = Arrays.asList(1, 2, 3);
        Gen gen = new Gen();
        gen.m(integerList);
    }

    static class Gen<T> {
        <T> void m(Collection<T> collection) {
            for (T s : collection) {
                System.out.println(s + " Дженерик");
            }
        }
        <T> void m(List<String> list) {
            for (String s : list) {
                System.out.println(s+ " String");
            }
        }
    }

Ответы (0 шт):