Пример моего общего типа имеет разные типы поведения в разных версиях JDK, что происходит?

Я написал простую программу, использующую общий тип. Однако простой пример ведет себя по-разному в разных версиях JDK.

Простой код выглядит следующим образом:

import java.util.List;

public class GenericTypes {

public static String method(List<String> list) {
    System.out.println("Method method(List<String> list) is invoked.");
    return "";
}

public static int method(List<Integer> list) {
    System.out.println("Method method(List<Integer> list) is invoked.");
    return 0;
}

}

Сценарий №1 == > на JDK 1.7 появляется ошибка компиляции

enter image description here

`Method method(List<String>) has the same erasure method(List<E>) as another method in type GenericTypes.`

Сценарий № 2 == > на JDK 1.6 или 1.5 отсутствует ошибка компиляции.

Снимок экрана для кода и вывода в консоли выглядит следующим образом:

enter image description here

Как известно, Generic Type вводится с JDK 1.5. Однако, с помощью простого примера, он ведет себя по-разному в разных версиях JDK.

Вот мои вопросы:

Q1 == > Какие изменения были внесены в более высокую версию JDK (например, JDK 1.7) для того, чтобы сделать поведение типа Generic по-разному в некоторых сценариях, таких как приведенный выше простой пример?

Q2 == > Ошибка компиляции лучше, чем ошибка компиляции в приведенном выше примере?

Пожалуйста, помогите мне с этим. Большое вам спасибо заранее.