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
, Есть ли конкретная причина, по которой он также избавляется от этого, или это просто общий подход «давайте просто избавимся от всего, потому что это проще; кому это все равно понадобится»?