Java: getClass () ограниченного типа

Я кое-что заметил, пока дурачился с дженериками. В приведенном ниже примереdoStuff1 компилирует ноdoStuff2 нет:

public <T extends Foo> void doStuff1(T value) {
    Class<? extends Foo> theClass = value.getClass();
}

public <T extends Foo> void doStuff2(T value) {
    Class<? extends T> theClass = value.getClass();
}

Итак, я посмотрел документацию дляObject.getClass() и нашел это:

Фактический тип результата - Class <? расширяет | X |> где | X | стирание статического типа выражения, для которого вызывается getClass.

Это сделало меня немного любопытным. ПочемуgetClass() разработан таким образом? Я могу понять преобразование типов в их необработанные классы, если это применимо, но я не вижу очевидной причины, почему они обязательно должны были бы заставить это также убиватьT, Есть ли конкретная причина, по которой он также избавляется от этого, или это просто общий подход «давайте просто избавимся от всего, потому что это проще; кому это все равно понадобится»?

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

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