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

Corriendo las primeras 3 líneas emite;En Java, ¿cómo determino dinámicamente el tipo de una matriz?

true 
[Ljava.lang.Long; 

¿Cómo puedo obtener ??? ser tipo largo? Podría analizar la cadena y hacer un Class.forname(), pero eso es sucio. ¿Cuál es la manera fácil?

Respuesta

56

Sólo tiene que escribir

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

De the JavaDoc:

public Class<?> getComponentType()

Devuelve la representación de la Class tipo de componente de una matriz. Si esta clase no representa una clase de matriz, este método devuelve null.

6

@ddimitrov es la respuesta correcta. Poner en código que se parece a esto:

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

Incluso de manera más general, podemos probar primero para ver si el tipo representa una matriz, y continuación obtener su componente:

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"); 
} 

Un ejemplo específico estaría aplicando este método a una matriz para la cual ya se conoce el tipo de componente:

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

¡Bastante sencillo!

+0

¿Qué pasa si el primer elemento es nulo, es decir, String [] arr = {null, "Chris", "Joseph"}; – Psycho

Cuestiones relacionadas