Mit Reflection ein Array von Primitiven eines unbekannten Typs abrufen

8

Ich verwende Reflektion, um ein Instanzfeld wie das folgende zu erhalten:

%Vor%

Mit dem Feldobjekt kann ich prüfen, ob das Feld ein Array enthält, und wenn dies der Fall ist, würde ich gerne die Ints im Array durchlaufen. Wenn also das Objekt, das das obige Feld enthält, "foo" heißt, dann würde ich so etwas haben:

%Vor%

Die obige Wertvariable enthält mein Array von Ints. Wie behandle ich dieses Objekt wie ein normales Array und iteriere über seine Werte?

Bearbeiten: Entschuldigung, ich habe einen entscheidenden Punkt zu meiner obigen Geschichte verpasst. Ich tue das oben in einer allgemeinen Weise, also weiß ich nicht, welches Primitiv das Array enthält. Es könnte ein int [] oder long [] usw. sein. So würde das Gießen nach int [] im langen [] Fall offensichtlich nicht funktionieren. Hoppla!

    
digiarnie 04.08.2010, 04:46
quelle

4 Antworten

12

Sie können die Klasse java.lang.reflect.Array verwenden, um auf die Länge und einzelne Elemente eines Arrays zuzugreifen. Die get -Methode sollte auf generische Weise funktionieren und möglicherweise Grundelemente in ihren Wrapper-Objekten umschließen.

    
Jörn Horstmann 04.08.2010, 10:02
quelle
1

Diese Seite wird im Abschnitt "Arrays verwenden" behandelt.

Vereinfachung (und Ändern von Variablennamen ;-) aus der Beispielklasse array2 ,

%Vor%

scheint das zu sein, wonach Sie suchen.

Bearbeiten : Das OP stellt jetzt klar, dass er nicht weiß, ob der primitive Typ im Array int , long oder was auch immer ist. Ich glaube, der einzige Weg, um damit umzugehen, ist ein if/else "tree" basierend auf Prüfungen des Primitiventyps (wie in Integer.TYPE oder was auch immer) - gefolgt von der entsprechenden Deklaration und der Umwandlung in die Verzweigung der Bedingung, die das identifiziert Geben Sie die Frage ein.

    
Alex Martelli 04.08.2010 04:50
quelle
0

Sie können es in ein Array wie dieses umwandeln

%Vor%     
Nikolaus Gradwohl 04.08.2010 04:50
quelle
0

Erwähnt in Orakel Tutorial dies ist leicht mit array.getClass().getComponentType() erreichbar. Dies gibt die Klasse der Instanzen im Array zurück.

Danach können Sie es mit der primitiven Klasse überprüfen, die sich in jedem Wrapper-Objekt befindet. Zum Beispiel:

%Vor%     
keiki 11.09.2015 12:40
quelle

Tags und Links