In Java, how do I dynamically determine the type of an array?

Just write

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

From the JavaDoc:

public Class<?> getComponentType()

Returns the Class representing the component type of an array. If this class does not represent an array class this method returns null.


http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getComponentType():

public Class<?> getComponentType()

Returns the Class representing the component type of an array. If this class does not represent an array class this method returns null...


@ddimitrov is the correct answer. Put into code it looks like this:

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

Even more generally, we can test first to see if the type represents an array, and then get its component:

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

A specific example would be applying this method to an array for which the component type is already known:

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

Pretty straightforward!