JAVA:不确定在反射中获取具有泛型类型的构造函数
JAVA: Not sure about getting constructor with generic types in reflection
public class A<T, U> implements S<T, U> {
private final T first;
private final U second;
public A(T first, U second) {
this.first = first;
this.second = second;
}
}
是否可以通过反射调用 public 构造函数?
我想做的是
classLoader.loadClass("A").getConstructor(<Something Here>).newInstance()
我可以这样做吗?
编译代码时,类型参数 T 和 U 被擦除 并变为 Object
。所以用Object.class
来表示构造函数的参数类型。
Constructor aConstructor = aClass.getConstructor(Object.class, Object.class);
由于类型参数被擦除,而不是传入虚构的T.class
和U.class
(这没有任何意义),你应该只传入两个Object.class
,因为这就是 T
和 U
擦除到:
A.class.getConstructor(Object.class, Object.class)
您还应该将一些参数传递给 newInstance
。例如,要创建一个 A<Integer, String>
,您可以这样做:
A<Integer, String> a =
(A<Integer , String>)A.class.getConstructor(Object.class, Object.class)
.newInstance(1, "Hello World");
public class A<T, U> implements S<T, U> {
private final T first;
private final U second;
public A(T first, U second) {
this.first = first;
this.second = second;
}
}
是否可以通过反射调用 public 构造函数?
我想做的是
classLoader.loadClass("A").getConstructor(<Something Here>).newInstance()
我可以这样做吗?
编译代码时,类型参数 T 和 U 被擦除 并变为 Object
。所以用Object.class
来表示构造函数的参数类型。
Constructor aConstructor = aClass.getConstructor(Object.class, Object.class);
由于类型参数被擦除,而不是传入虚构的T.class
和U.class
(这没有任何意义),你应该只传入两个Object.class
,因为这就是 T
和 U
擦除到:
A.class.getConstructor(Object.class, Object.class)
您还应该将一些参数传递给 newInstance
。例如,要创建一个 A<Integer, String>
,您可以这样做:
A<Integer, String> a =
(A<Integer , String>)A.class.getConstructor(Object.class, Object.class)
.newInstance(1, "Hello World");