Integer.class und int.class

8

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?

    
casablanca 04.02.2012, 08:14
quelle

3 Antworten

6

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.

    
casablanca 05.02.2012, 00:37
quelle
4

Aufgrund von Autoboxing . Sie können Primitive nicht als Typparameter verwenden, daher wird das Primitiv in den Wrapper eingereiht.

    
Bozho 04.02.2012 08:16
quelle
4

Ich glaube nicht, dass das etwas mit Autoboxen zu tun hat.

Dies ist Teil der generischen Regeln, die primitive Typen als Wrapper behandeln.

    
Peter Lawrey 04.02.2012 08:52
quelle

Tags und Links