我需要在代码中使用反射,因此我的程序不会破坏每个不同的版本。我想创建一个类的新实例,我想要使用的构造函数包含一个类的数组。但是,必须使用反射找到该类。这是我目前拥有的一个例子。
Constructor<?> constructor = getClass("className").getConstructor(getClass("anotherClass"));
private Class<?> getClass(String name) {
return Class.forName("my.package." + version + "." + name);
}
但是构造函数不使用该类,而是使用该类的数组,那么如何将此类转换为数组类型呢?
答案 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
对象。您可以使用它来检索构造函数。