Wie kompiliert diese Java-Anweisung ohne Warnungen?
%Vor%obwohl
%Vor% Bearbeiten: Anders ausgedrückt, es scheint so, als ob Integer.class
und int.class
nichts gemeinsam haben (siehe Kommentare unten), also warum ist es sinnvoll für diese Aufgabe zu sein möglich?
Nach vielen Recherchen stieß ich auf diesen kleinen Ausschnitt in der JLS, Abschnitt 15.8.2 Klassenliterale :
Wenn p der Name eines primitiven Typs ist, sei B der Typ eines Ausdrucks vom Typ p nach der Box-Konvertierung (§5.1.7). Dann ist der Typ von p.class Klasse & lt; B & gt;.
Die Spezifikation erklärt nicht, warum dies so ist, anstatt zum Beispiel Class<?>
. Ich konnte auch keinen Hinweis finden, dass dies mit Generika oder Autoboxen zusammenhängt.
Integer
ist ein erstklassiges Objekt, während int
ein primitiver Typ ist und die meisten Methoden von Class
wie isInstance
, isAssignableFrom
und cast
, die auf Object
s operieren, sind ungültig im Kontext von int.class
. Daher sehe ich keinen Grund, warum der Typ von int.class
Class<Integer>
ist.
Aufgrund von Autoboxing . Sie können Primitive nicht als Typparameter verwenden, daher wird das Primitiv in den Wrapper eingereiht.
Ich glaube nicht, dass das etwas mit Autoboxen zu tun hat.
Dies ist Teil der generischen Regeln, die primitive Typen als Wrapper behandeln.
Tags und Links java