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

Dee*_*rda 15 java arrays reflection class

我有一个Class包含某种类型的变量,我需要获取一个包含相应数组类的变量.我能想到的最好的是:

Class arrayOfFooClass = java.lang.reflect.Array.newInstance(fooClass, 0).getClass();
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*fer 16

如果您不想创建实例,可以手动创建数组的规范名称并按名称获取类:

// Replace `String` by your object type.
Class stringArrayClass = Class.forName(
    "[L" + String.class.getCanonicalName() + ";"
);
Run Code Online (Sandbox Code Playgroud)

Jakob Jenkov在他的博客中指出,你的解决方案更好,因为它不需要摆弄字符串.

Class stringArrayClass = Array.newInstance(String.class, 0).getClass();
Run Code Online (Sandbox Code Playgroud)

  • “这不需要创建该类的新实例” - [好吧...](https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/郎/Class.java#L4483) (3认同)
  • 他从上面开始,最后得到了我所拥有的东西.所以我猜`newInstance`是最干净的方法. (2认同)

Joh*_*uhn 12

从 Java 12 开始,就有了arrayType()java.lang.Class 上方法。接着就,随即:

Class<?> arrayOfFooClass = fooClass.arrayType();
Run Code Online (Sandbox Code Playgroud)