在Java中,我该如何动态确定数组的类型?
问题描述:
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(),但那很糟糕。简单的方法是什么?
答
只要写
Class ofArray = o.getClass().getComponentType();
public Class<?> getComponentType()
返回
Class
代表数组的组件类型。如果此类不表示数组类,则此方法返回null
。
答
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#getComponentType():
public Class<?> getComponentType()
返回表示数组的组件类型的
Class
。如果该类不表示数组类此方法返回null ...
答
@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
非常简单!
如果第一个元素为空,即String [] arr = {null,“Chris”,“Joseph”}; – Psycho 2016-09-25 06:34:24