我有一个在构造函数中使用List的类;
public class MyClass {
private List<Structure> structures;
public MyClass(List<Structure> structures) {
this.structures = structures;
}
}
我需要通过反射来实例化。如何定义对class.getConstructor()的调用来查找它?
此致
答案 0 :(得分:8)
这应该有效:
Constructor<MyClass> constructor = MyClass.class.getConstructor(List.class);
或
Constructor constructor = MyClass.class.getConstructor(new Class[]{List.class});
for Java 1.4.x或更低版本
答案 1 :(得分:5)
您只需传入List.class
即可找到它。例如:
import java.util.*;
import java.lang.reflect.*;
public class Test {
public static void main(String[] args) throws Exception {
Class<?> clazz = MyClass.class;
Constructor<?> ctor = clazz.getConstructor(List.class);
ctor.newInstance(new Object[] { null });
}
}
如果需要验证通用参数类型,可以使用getGenericParameterTypes
并检查它返回的Type[]
。例如:
Type[] types = ctor.getGenericParameterTypes();
System.out.println(types[0]); // Prints java.util.List<Structure>
调用getConstructor
时不需要指定类型参数,因为您不能通过使用 不同类型参数的参数来重载构造函数。这些参数类型将具有相同的类型擦除。例如,如果您尝试添加具有此签名的另一个构造函数:
public MyClass(List<String> structures)
你会收到这样的错误:
MyClass.java:7:名称冲突:
MyClass(java.util.List<java.lang.String>)
和MyClass(java.util.List<Structure>)
具有相同的删除