JAVA:不确定如何在反射中获取具有泛型类型的构造函数 公共类A实现了{ 私人决赛第一名; 私人决赛U秒; 公共A(T第一,U第二){ this.first=first; 这个秒=秒; } }

JAVA:不确定如何在反射中获取具有泛型类型的构造函数 公共类A实现了{ 私人决赛第一名; 私人决赛U秒; 公共A(T第一,U第二){ this.first=first; 这个秒=秒; } },java,reflection,generic-programming,Java,Reflection,Generic Programming,是否仍然可以从反射调用公共构造函数 我想做的是 classLoader.loadClass(“A”).getConstructor().newInstance() 我可以这样做吗?当编译代码时,类型参数T和U被删除并成为对象。因此,使用Object.class指示构造函数参数类型 Constructor aConstructor = aClass.getConstructor(Object.class, Object.class); 当编译代码时,类型参数T和U被擦除并成为Object。因此

是否仍然可以从反射调用公共构造函数

我想做的是

classLoader.loadClass(“A”).getConstructor().newInstance()

我可以这样做吗?

当编译代码时,类型参数T和U被删除并成为
对象。因此,使用
Object.class
指示构造函数参数类型

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

当编译代码时,类型参数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
,可以执行以下操作:

A<Integer, String> a = 
    (A<Integer , String>)A.class.getConstructor(Object.class, Object.class)
    .newInstance(1, "Hello World");
A=
(A) A.class.getConstructor(Object.class,Object.class)
.newInstance(1,“你好世界”);

由于类型参数被擦除,因此不应传入虚构的
T.class
U.class
(这并不意味着什么),而应传入两个
Object.class
,因为这就是
T
U
擦除到的内容:

A.class.getConstructor(Object.class, Object.class)
您还应该将一些参数传递给
newInstance
。例如,要创建
a
,可以执行以下操作:

A<Integer, String> a = 
    (A<Integer , String>)A.class.getConstructor(Object.class, Object.class)
    .newInstance(1, "Hello World");
A=
(A) A.class.getConstructor(Object.class,Object.class)
.newInstance(1,“你好世界”);

如果构造函数是公共的,为什么要使用反射?由于泛型信息在运行时或多或少会丢失(类型擦除),它应该是
getConstructor(Object.class,Object.class)
@mslowiak我使用的是Minecraft项目中的这个东西,每次版本更改时类都会不同。我想创建一个独立于版本的项目,因此我需要一个方法来调用该类而不直接调用。@dpr我将尝试使用该对象。类谢谢!如果构造函数是公共的,为什么要使用反射?由于泛型信息在运行时或多或少会丢失(类型擦除),它应该是
getConstructor(Object.class,Object.class)
@mslowiak我使用的是Minecraft项目中的这个东西,每次版本更改时类都会不同。我想创建一个独立于版本的项目,因此我需要一个方法来调用该类而不直接调用。@dpr我将尝试使用该对象。类谢谢!