Java 如何实例化具有带参数的私有构造函数的泛型类

Java 如何实例化具有带参数的私有构造函数的泛型类,java,reflection,Java,Reflection,我正在使用第三方库创建一个java应用程序,并希望实例化它的类。但是,该类是泛型的,并且只有一个私有构造函数 我试图通过Guice注入创建一个实例。 Test无法修改,因此我既没有使用@Inject注释,也没有添加非私有的零参数构造函数 公共类测试{ 私人最终T值; 专用测试(T值){ 这个值=值; } @凌驾 公共字符串toString(){ 返回此.value.toString(); } } Injector-Injector=Guice.createInjector(新抽象模块(){ @

我正在使用第三方库创建一个java应用程序,并希望实例化它的类。但是,该类是泛型的,并且只有一个私有构造函数

我试图通过Guice注入创建一个实例。
Test
无法修改,因此我既没有使用@Inject注释,也没有添加非私有的零参数构造函数

公共类测试{
私人最终T值;
专用测试(T值){
这个值=值;
}
@凌驾
公共字符串toString(){
返回此.value.toString();
}
}
Injector-Injector=Guice.createInjector(新抽象模块(){
@凌驾
受保护的void configure(){
绑定(新的TypeLiteral(){
});
}
});
Test=(Test)injector.getInstance(Test.class);
System.out.println(String.format(“%s”,test));
我想知道如何将参数放入测试类的构造函数,以及如何实例化它。

您可以(但可能不应该)使用反射执行此操作:

    Constructor<Test> declaredConstructor = Test.class.getDeclaredConstructor(Object.class);
    declaredConstructor.setAccessible(true); // or if (declaredConstructor.trySetAccessible()) on java 9+
    Test<String> obj = declaredConstructor.newInstance("value of first parameter");
Constructor declaredConstructor=Test.class.getDeclaredConstructor(Object.class);
declaredConstructor.setAccessible(true);//或者如果java 9上有(declaredConstructor.trySetAccessible())+
Test obj=declaredConstructor.newInstance(“第一个参数的值”);
泛型在运行时被忽略,所以您只需要在这里使用下限
Object.class
。如果它是
classtest
,那么您将查找
某物.class
,否则默认情况下它是Object


若那个测试类来自某个库,那个么可能有一个方法创建了它。。。因此,可以避免使用反射。

如果构造函数声明为私有,则只能从同一类中实例化它。如果构造函数是私有的,则第三方库的实现者应该有充分的理由这样编写。因此,最好的方法是参考该库的文档,看看如何正确地使用它。
    Constructor<Test> declaredConstructor = Test.class.getDeclaredConstructor(Object.class);
    declaredConstructor.setAccessible(true); // or if (declaredConstructor.trySetAccessible()) on java 9+
    Test<String> obj = declaredConstructor.newInstance("value of first parameter");