JAVA:不确定是否在反射中获取具有泛型类型的构造函数


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;
}
}

有没有办法从反射中调用公共构造函数?

我想做的是

classLoader.loadClass("A").getConstructor(<Something Here>).newInstance()

我可以这样做吗?

由于类型参数被擦除,而不是传入虚构的T.classU.class(这没有任何意义(,你应该只传入两个Object.class,因为这就是TU擦除的内容:

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");

类型参数 T 和 u 在编译代码时被擦除并变得Object。因此,请使用Object.class来指示构造函数参数类型。

Constructor aConstructor = aClass.getConstructor(Object.class, Object.class);

最新更新