wat*_*erg 31 java arrays reflection runtime class
这是一个变量Class<?> cls
,现在我想得到另一个Array Class Object
组件类型cls
.
例如,如果cls
= String.class
,我想得到String[].class
; if cls
= int.class
,我想知道int[].class
,我该怎么办?
你看,这是很容易得到String.class
来自String[].class
:
Class<?> arrayCls = String[].class;
if(arrayCls.isArray()){
Class<?> cls = arrayCls.getComponentType();
}
Run Code Online (Sandbox Code Playgroud)
但我找不到简单的方法来做相反的事情.
这是一个可能的解决方案:
Class<?> clazz = String.class;
Class<?> arrayClass = Array.newInstance(clazz,0).getClass();
Run Code Online (Sandbox Code Playgroud)
请问有什么打击方法吗?
Lim*_*eth 16
HRgiger的答案有所改善:
@SuppressWarnings("unchecked")
static <T> Class<? extends T[]> getArrayClass(Class<T> clazz) {
return (Class<? extends T[]>) Array.newInstance(clazz, 0).getClass();
}
Run Code Online (Sandbox Code Playgroud)
它们都在调用时实例化一个数组对象.要获取阵列类型,请使用
Class<?> childType = ...;
Class<?> arrayType = getArrayClass(childType);
Run Code Online (Sandbox Code Playgroud)
HRg*_*ger 10
我发现的另一个技巧是在util方法上使用varargs.
public static void main(String[] args) throws ClassNotFoundException {
Class<?> demo = Main.<String>getArrayClass();
System.out.println(demo);
}
static <T> Class getArrayClass(T... param){
return param.getClass();
}
Run Code Online (Sandbox Code Playgroud)
也许试试Class.forName(String)
?
编辑:这是一个代码段.
Class<?> arrayClass = String[].class;
System.out.println(arrayClass);
Class<?> namedClass = Class.forName("[L" + String.class.getName() + ";");
System.out.println(namedClass);
System.out.println(arrayClass == namedClass);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25916 次 |
最近记录: |