繁体   English   中英

在构造函数中的类数组与反射

[英]Class array in constructor with reflection

我需要在我的代码中使用反射,所以我的程序不会破坏每个不同的版本。 我想创建一个类的新实例,我想要使用的构造函数包含一个类的数组。 但是,必须使用反射找到该类。 这是我目前拥有的一个例子。

Constructor<?> constructor = getClass("className").getConstructor(getClass("anotherClass"));

private Class<?> getClass(String name) {
    return Class.forName("my.package." + version + "." + name);
}

但是构造函数不使用该类,而是使用该类的数组,那么如何将此类转换为它的数组类型呢?

Java虚拟机规范指定了数组类型的类名。 您可以构造这样的名称并使用Class#forName 但是,名称的逻辑在原始类型和引用类型之间有所不同,因此生成这些String名称可能会很烦人。

相反,您可以为给定类型构造一个大小为0的数组,并使用它来使用getClass()检索其类型。

例如

Class<?> componentType = Class.forName("java.lang.String");
Class<?> arrayType = java.lang.reflect.Array.newInstance(componentType, 0).getClass();
System.out.println(arrayType);

将打印

class [Ljava.lang.String;

然后, arrayType将保存给定数组类型的Class对象。 您可以使用它来检索构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM