具有反射

时间:2016-04-29 15:10:43

标签: java

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

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

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

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

1 个答案:

答案 0 :(得分:6)

The Java Virtual Machine specification指定数组类型的类名。您可以构造这样的名称并使用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对象。您可以使用它来检索构造函数。