Java: getClass () typu ograniczonego

Zauważyłem coś, kiedy śmiałem się z generykami. W poniższym przykładzie,doStuff1 kompiluje, aledoStuff2 nie:

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();
}

Sprawdziłem więc dokumentacjęObject.getClass() i znalazłem to:

Rzeczywisty typ wyniku to Klasa <? extends | X |> gdzie | X | jest kasowaniem statycznego typu wyrażenia, na które wywoływana jest getClass.

To mnie trochę ciekawiło. Dlaczego jestgetClass() zaprojektowany w ten sposób? Rozumiem konwersję typów do ich klas surowych, jeśli ma to zastosowanie, ale nie widzę żadnego oczywistego powodu, dla którego koniecznie musieliby to również zabićT. Czy jest jakiś konkretny powód, dla którego również się go pozbywa, czy też jest to tylko ogólne „pozbądźmy się wszystkiego, bo jest łatwiej; kto i tak by go potrzebował”?

questionAnswers(4)

yourAnswerToTheQuestion