2010-02-04 31 views
24

Ich mache einige Reflexion Arbeit und gehe zu einem kleinen Problem.Iterieren über Arrays von Reflexion

Ich versuche, Objekte zu einem GUI-Baum zu drucken und Probleme bei der generischen Erkennung von Arrays zu haben.

Ich schlug vor, dass:

Objekt Instanceof Iterable

den Job machen würde, aber es funktioniert nicht, (natürlich gilt nur für Listen und Set und wer setzt sie.)

Also, wie ist das, würde ich ein Array Some Object[], oder long[] oder Long[] .. erkennen?

Dank

Antwort

58

Wenn Sie nicht nur überprüfen wollen, ob das Objekt ein Array ist, sondern auch iterieren:

if (array.getClass().isArray()) { 
    int length = Array.getLength(array); 
    for (int i = 0; i < length; i ++) { 
     Object arrayElement = Array.get(array, i); 
     System.out.println(arrayElement); 
    } 
} 

(die obige Klasse ist java.lang.reflect.Array)

2

Sie

tun können
if (o instanceof Object[]) { 
    Object[] array = (Object[]) o; 
    // now access array.length or 
    // array.getClass().getComponentType() 
} 
+0

Das ist gut, aber es gilt nicht für die primitiven Array-Typen. Ich denke, ich fand die Antwort: object.getClass(). IsArray() .. lol – Roman

5

Haben Sie Object.getClass().isArray() bedeuten?

0

Zu allererst @ Bozho des Antwort ist vollkommen richtig.

Wenn Sie dies machen möchten leichter nutzbar sein, habe ich gerade eine Methode in unserer little OSS utility molindo-utils, die ein Array von unbekannten Typs in eine Iterable verwandelt: ArrayUtils.toIterable(Object)

Auf diese Weise können Sie tun:

Siehe README von molindo-utils auf, wie man molindo-utils erhält oder den Code frei kopieren kann, wenn Sie mögen, gerade, wie Sie sehen.