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

后端 未结 3 1366
醉梦人生
醉梦人生 2020-12-06 04:26
Object o = new Long[0]
System.out.println( o.getClass().isArray() )
System.out.println( o.getClass().getName() )
Class ofArray = ???

Running the fi

相关标签:
3条回答
  • 2020-12-06 04:33

    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...

    0 讨论(0)
  • 2020-12-06 04:35

    @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!

    0 讨论(0)
  • 2020-12-06 04:48

    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.

    0 讨论(0)
提交回复
热议问题