2008-10-17 9 views
29
Object o = new Long[0] 
System.out.println(o.getClass().isArray()) 
System.out.println(o.getClass().getName()) 
Class ofArray = ??? 

Laufen die ersten 3 Linien emittiert;Wie ermittle ich in Java den Typ eines Arrays dynamisch?

true 
[Ljava.lang.Long; 

Wie bekomme ich ??? lang sein? Ich könnte die Zeichenfolge analysieren und eine Class.forname() machen, aber das ist schäbig. Was ist der einfache Weg?

Antwort

56

Schreiben Sie einfach

Class ofArray = o.getClass().getComponentType(); 

Von the JavaDoc:

public Class<?> getComponentType()

Gibt die Class repräsentiert die Komponententyp eines Arrays. Wenn diese Klasse keine Array-Klasse darstellt, gibt diese Methode null zurück.

6

@ddimitrov ist die richtige Antwort. In die Code sieht es wie folgt aus:

public <T> Class<T> testArray(T[] array) { 
    return array.getClass().getComponentType(); 
} 

Auch im Allgemeinen mehr, wir zunächst testen, um zu sehen, ob der Typ ein Array darstellt und dann seine Komponente zu erhalten:

Object maybeArray = ... 
Class<?> clazz = maybeArray.getClass(); 
if (clazz.isArray()) { 
    System.out.printf("Array of type %s", clazz.getComponentType()); 
} else { 
    System.out.println("Not an array"); 
} 

Ein konkretes Beispiel

String[] arr = {"Daniel", "Chris", "Joseph"}; 
arr.getClass().getComponentType();    // => java.lang.String 

Ziemlich einfach: für die ist bereits bekannt, die Komponententyp wäre diese Methode auf ein Array anwenden!

+0

Was ist, wenn das erste Element null ist, d. H. String [] arr = {null, "Chris", "Joseph"}; – Psycho

Verwandte Themen