Java - 从类对象的类型A获取类型A的数组的类对象?

时间:2014-08-13 00:14:38

标签: java generics

如果我有Class<A> cls,有没有办法将其转换为Class<A[]> arrCls

2 个答案:

答案 0 :(得分:3)

我认为这取决于你需要什么。

如果您只需要数组类型的Class对象,则方法应该起作用:

  Class<A> cls = ...;
  Object array = Array.newInstance(cls, 1);
  Class<?> arrCls = array.getClass();

如果A是具体类或类型参数,则应该有效。

但是,如果您需要使用arrCls类型声明Class<A[]> ...那么我就不知道如何做到这一点,而不是诉诸&#34;不安全& #34;类型演员。 newInstance(...)方法返回Object,因此您删除了通用输入。

答案 1 :(得分:1)

如果您尝试从Class<A[]>实例化类型为Class<A>的变量,则可以使用此方法:

public static <T> Class<T[]> classToArrayClass(Class<T> type) {
    return (Class<T[]>) Array.newInstance(type, 0).getClass();
}

例如:

Class<String> cls = String.class;
Class<String[]> clsArray = classToArrayClass(cls);
System.out.println(clsArray.isArray());
System.out.println(clsArray.getComponentType().getName());

/* Output:
true
java.lang.String
*/
相关问题