如何在Java中获取给定类的数组类?

2022-09-01 10:41:20

我有一个保存特定类型的变量,我需要获取一个保存相应数组类的变量。我能想到的最好的是这个:Class

Class arrayOfFooClass = java.lang.reflect.Array.newInstance(fooClass, 0).getClass();

有没有办法在不创建新实例的情况下执行此操作?


答案 1

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

³ 感谢您对约翰内斯·库恩的提示。


答案 2

从Java 12开始,java.lang.Class上有arrayType()方法。有了这个:

Class<?> arrayOfFooClass = fooClass.arrayType();

实现只是调用 。Class.arrayType()Arrays.newInstance(this, 0).getClass()