Java: getClass () vom Typ "bounded"

Mir ist etwas aufgefallen, als ich mit Generika rumgespielt habe. Im folgenden BeispieldoStuff1 kompiliert aberdoStuff2 nicht:

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

Also habe ich die Dokumentation nachgeschlagenObject.getClass() und fand dies:

Der tatsächliche Ergebnistyp ist Class <? erweitert | X |> wo | X | ist das Löschen des statischen Typs des Ausdrucks, für den getClass aufgerufen wird.

Das hat mich ein bisschen neugierig gemacht. Warum istgetClass() so gestaltet? Ich kann verstehen, wie man Typen gegebenenfalls in ihre Rohdatenklassen konvertiert, sehe aber keinen offensichtlichen Grund, warum sie es zwangsläufig auch schaffen müssten, abzutötenT. Gibt es einen bestimmten Grund, warum es auch beseitigt wird, oder ist es nur ein allgemeiner Ansatz: "Lasst uns einfach alles loswerden, weil es einfacher ist; wer würde es überhaupt brauchen"?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage