关于java:从`String.class`得到`String .class`,如果`String.class`是“运行时类型”怎么办?

这是一个变量Class cls ,现在我想获得另一个组件类型为cls Array Class Object

例如,如果cls = String.class ,我想得到String[].class ; 如果cls = int.class ,我想得到int[].class ,我该怎么办?

你看,从String[].class获取String.class非常容易String[].class

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

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

这是一个可能的解决方案:

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

请问有什么方法可以做到这一点吗?

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

HRgiger的答案有所改善:

 @SuppressWarnings("unchecked") static  Class getArrayClass(Class clazz) { return (Class) Array.newInstance(clazz, 0).getClass(); } 

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

 Class childType = ...; Class arrayType = getArrayClass(childType); 

我发现的另一个技巧是在util方法上使用varargs。

 public static void main(String[] args) throws ClassNotFoundException { Class demo = Main.getArrayClass(); System.out.println(demo); } static  Class getArrayClass(T... param){ return param.getClass(); }