überraschender Kompilierungsfehler beim Abrufen der Array-Klasse einer Klasse

8

In letzter Zeit habe ich viel mit Reflektion gearbeitet und diese kleine Hilfsmethode implementiert. Ich war überrascht zu finden, dass die erste Version nicht kompiliert, aber das letzte tut.

Kompiliert nicht:

%Vor%

Kompiliert und funktioniert gut:

%Vor%

Zwei Fragen: Was ist daran falsch? Gibt es einen besseren Weg, dies zu tun?

Hier ist der Kompilierungsfehler vom ersten:

%Vor%     
RutledgePaulV 04.01.2015, 19:15
quelle

1 Antwort

4

Der Rückgabetyp von getClass() ist Class<?> .

In Ihrem Beispiel weisen Sie Class<?> auf Class<T[]> zu (in der return-Anweisung), was falsch ist, Sie brauchen einen Cast.

Dies wird gut kompiliert:

%Vor%

In Ihrem zweiten Beispiel verwenden Sie den Raw-Typ Class , was gut funktioniert - der Casting-Raw-Typ scheint implizit zu sein. Sie erhalten jedoch eine Compilerwarnung, da dies eine entmutigte Technik ist.

Wenn Sie es richtig als Class<?> parametrisieren, benötigen Sie auch die Besetzung.

    
MightyPork 04.01.2015, 19:21
quelle

Tags und Links