如何在Java中获取给定类的数组类?
2022-09-01 10:41:20
我有一个保存特定类型的变量,我需要获取一个保存相应数组类的变量。我能想到的最好的是这个:Class
Class arrayOfFooClass = java.lang.reflect.Array.newInstance(fooClass, 0).getClass();
有没有办法在不创建新实例的情况下执行此操作?
我有一个保存特定类型的变量,我需要获取一个保存相应数组类的变量。我能想到的最好的是这个:Class
Class arrayOfFooClass = java.lang.reflect.Array.newInstance(fooClass, 0).getClass();
有没有办法在不创建新实例的情况下执行此操作?
从Java 12开始
Class
提供了一个方法 arrayType(),
它返回其组件类型由给定类描述的数组类型类。请注意,单个 JDK 仍可能创建该 Class³ 的实例。
Class<?> stringArrayClass = FooBar.arrayType()
在 Java 12 之前
如果您不想创建实例,可以手动创建数组的规范名称,并按名称获取类:
// Replace `String` by your object type.
Class<?> stringArrayClass = Class.forName(
"[L" + String.class.getCanonicalName() + ";"
);
但雅各布·詹科夫(Jakob Jenkov)在他的博客中认为,你的解决方案是更好的,因为它不需要摆弄字符串。
Class<?> stringArrayClass = Array.newInstance(String.class, 0).getClass();
³ 感谢您对约翰内斯·库恩的提示。
从Java 12开始,java.lang.Class上有arrayType()
方法。有了这个:
Class<?> arrayOfFooClass = fooClass.arrayType();
实现只是调用 。Class.arrayType()
Arrays.newInstance(this, 0).getClass()