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

运行前3行发出;在Java中,我该如何动态确定数组的类型?

true 
[Ljava.lang.Long; 

我该如何获得?是长型?我可以解析字符串并做一个Class.forname(),但那很糟糕。简单的方法是什么?

回答

56

只要写

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

the JavaDoc

public Class<?> getComponentType()

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

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 

非常简单!

+0

如果第一个元素为空,即String [] arr = {null,“Chris”,“Joseph”}; – Psycho 2016-09-25 06:34:24

相关问题