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