【发布时间】:2021-05-15 17:06:37
【问题描述】:
如果我有一个类,它里面有一个私有接口,它有@FunctionalInterface 注释,以及一个私有构造函数,它接受一个实现这个接口的类的实例,我如何使用反射构造这个对象所述接口的自定义实现?例如:
public class mcve {
private mcve(mcve.wrapper<String> wrp1, mcve.wrapper<String> wrp2) {
// ...
}
private mcve(mcve.wrapper<String> wrp1) {
// ..
}
public static final mcve INSTANCE_1 = new mcve(ClassExtendsString::new, ClassExtendsString::new);
public static final mcve INSTANCE_2 = new mcve(ClassExtendsString2::new, ClassExtendsString2::new);
@FunctionalInterface
interface wrapper<O> {
O wrap(O object) throws Exception;
}
}
还有一些代码试图完成我想要的:
Constructor<mcve> constructor;
constructor = mcve.class.getDeclaredConstructor(??.class);
constructor.setAccessible(true);
mcve testInstance = constructor.newInstance(?? MyCustomClassExtendingString::new);
我该如何进行?编译器抱怨Object 不是功能接口。我不确定要传递给getDeclaredConstructor 和newInstance。
【问题讨论】:
-
为什么要在这里使用反射?
-
假设我不能修改 `mcve'。
-
@KamilaSzewczyk 你为什么要传递
MyCustomClassExtendingString::new?你可以传递对象本身new MyCustomClassExtendingString()
标签: java reflection