在Java中,如何动态确定数组的类型?

时间:2008-10-17 16:12:33

标签: java

Object o = new Long[0]
System.out.println( o.getClass().isArray() )
System.out.println( o.getClass().getName() )
Class ofArray = ???

运行前3行发出;

true
[Ljava.lang.Long;

我怎么得到???要打字?我可以解析字符串并执行Class.forname(),但那很糟糕。什么是简单的方法?

3 个答案:

答案 0 :(得分:65)

只需写下

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

来自the JavaDoc

  

public Class<?> getComponentType()

     

返回表示数组的组件类型的Class。如果此类不表示数组类,则此方法返回null

答案 1 :(得分:21)

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

public Class<?> getComponentType()
     

返回表示数组的组件类型的Class。如果此类不表示数组类,则此方法返回null ...

答案 2 :(得分:6)

@ddimitrov是正确的答案。放入代码看起来像这样:

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

更一般地说,我们可以先测试一下这个类型是否代表一个数组,然后得到它的组件:

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

一个具体示例是将此方法应用于已知组件类型的数组:

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

非常简单!