java - 关于 java : get `String[].class` from `String.class` , 如果 `String.class` 是 "runtime type"怎么办?

标签 java arrays class reflection runtime

这是一个变量Class<?> cls ,现在我想再买一个Array Class Object哪个组件类型是 cls .

例如,如果 cls = String.class , 我想得到 String[].class ;如果 cls = int.class , 我想得到 int[].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();

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

最佳答案

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);

关于java - 关于 java : get `String[].class` from `String.class` , 如果 `String.class` 是 "runtime type"怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392160/

相关文章:

Java程序打印学生成绩

ruby - 为什么在二维数组中赋值会有不同的结果?

Java 反射(reflect)嵌套的匿名类

java - 如何使用 JSON 按声明顺序序列化带有枚举键的映射?

c - 如何使用 C 测量 L1、L2 和 L3 缓存延迟?

javascript - 组合 getElementsByWhatever 返回的数组

php - 你能举例说明如何使用 PHP __method__ 吗?

javascript - 我们是否应该在 ES6 类的原型(prototype)中包含方法以提高性能?

java - 接口(interface)方法中的最终参数 - 有什么意义?

java - Spring 从 xml 应用程序上下文加载命令行参数