如何在Java中使用反射获取构造函数方法引用

如何在Java中使用反射获取构造函数方法引用,java,lambda,constructor,java-8,method-reference,Java,Lambda,Constructor,Java 8,Method Reference,我有一个在项目中使用的库。它有一个类,可以实例化为 A对象=新A(新B(值),C::新,D::新) 类A、B、C、D都不是公共的,尽管构造函数是公共的 所以,我想用反射来实现这一点。但是,我不知道如何使用反射进行方法引用C::new,D::new 如果您能给我一些建议,我将不胜感激。使用构造函数引用这一事实并不重要。您只需要知道它转换成的函数接口类型,然后创建该接口的实例 对于默认构造函数,这可能是供应商。你会得到这样的结果: Class<C> cKlass = ...; Const

我有一个在项目中使用的库。它有一个类,可以实例化为

A对象=新A(新B(值),C::新,D::新)

类A、B、C、D都不是公共的,尽管构造函数是公共的

所以,我想用反射来实现这一点。但是,我不知道如何使用反射进行方法引用
C::new
D::new


如果您能给我一些建议,我将不胜感激。

使用构造函数引用这一事实并不重要。您只需要知道它转换成的函数接口类型,然后创建该接口的实例

对于默认构造函数,这可能是
供应商
。你会得到这样的结果:

Class<C> cKlass = ...;
Constructor<C> cCons = cKlass.getDeclaredConstructor();

Supplier<C> cSupp = () -> { // similarly for class D
        try {
            return cCons.newInstance();
        } catch (Exception e) {
            throw new RuntimeException("Can not default construct " + cKlass, e);
        }
};

...

Class<A> aKlass = ...;
Constructor<A> aCons = aKlass.getDeclaredConstructor(B.class, Supplier.class, Supplier.class);
A a = aCons.newInstance(b, cSupp, dSupp);
Class-cKlass=。。。;
构造函数cCons=cKlass.getDeclaredConstructor();
供应商cSupp=()->{//类似于D类
试一试{
返回cCons.newInstance();
}捕获(例外e){
抛出新的运行时异常(“不能默认构造”+cKlass,e);
}
};
...
类Aclass=。。。;
构造函数aCons=aKlass.getDeclaredConstructor(B.class,Supplier.class,Supplier.class);
A=aCons.newInstance(b,cSupp,dSupp);

您反对库设计有什么好的理由吗?
C.class.newInstance()
?我不明白你的问题…所以你希望我们猜参数类型?