Почему универсальный необработанный класс Java стирает все обобщенные объекты в объект, когда параметры типа не определены? [Дубликат]

На этот вопрос уже есть ответ:

Комбинирование необработанных типов и общих методов 5 ответов Почему этот общий код Java не скомпилируется? 4 ответа

Если у меня есть класс:

public class GenericClass<TBlah extends Number> {
    public List<String> getList() {
        return null;
    }
}

Когда я пытаюсь использовать этот метод из другого класса:

public class OtherClass {
    public void test() {
        GenericClass a = null;
        for (String s : a.getList()) {

        }
    }
}

Почемуa.getList() вернутьList<Object> пока я не изменю строку над циклом for на:

GenericClass<Number> a = null;

В какой точке a.getList () возвращаетList<String> как должно быть?

Ред .: Я не понимаю, почему контракт указанgetList()а @ должно повлиять то, как я объявляю свою переменную 'a'.getList() всегда возвращаетList<String>, не важно, что TBlah является

Ответы на вопрос(1)

Ваш ответ на вопрос