关于java:从“String.class”中获取“String[].class”,如果“String.class”是“运行时类型”呢?

2022-09-01 07:47:39

这是一个变量,现在我想得到另一个组件类型是。Class<?> clsArray Class Objectcls

例如,如果 = ,我想得到 ;如果 =, 我想得到 ,我该怎么办?clsString.classString[].classclsint.classint[].class

你看,从以下位置很容易获得:String.classString[].class

Class<?> arrayCls = String[].class;
if(arrayCls.isArray()){
    Class<?> cls = arrayCls.getComponentType();
}

但是我找不到简单的方法来做相反的事情。

以下是一种可能的解决方案:

Class<?> clazz = String.class;
Class<?> arrayClass = Array.newInstance(clazz,0).getClass();

有什么面糊方法可以做到这一点吗?


答案 1

HRgiger的答案得到了改进:

@SuppressWarnings("unchecked")
static <T> Class<? extends T[]> getArrayClass(Class<T> clazz) {
    return (Class<? extends T[]>) Array.newInstance(clazz, 0).getClass();
}

它们都在调用时实例化数组对象。要获取数组类型,请使用

Class<?> childType = ...;
Class<?> arrayType = getArrayClass(childType);

答案 2

也许试试?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);