如果我有Class<A> cls
,有没有办法将其转换为Class<A[]> arrCls
?
答案 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
*/