我正在尝试使用工厂设计模式来实例化对象。虽然,构造函数具有varargs参数。
public class Foo implements Bar
public Foo(Object... args) {
}
在工厂中,我试图得到这样的构造函数:
private Constructor<Bar> getConstructor(Class<Bar> clazz) {
return clazz.getDeclaredConstructor(Object.class);
}
但这是行不通的。我也尝试过:
private Constructor<Bar> getConstructor(Class<Bar> clazz) {
return clazz.getDeclaredConstructor(Object[].class);
}
但是我将失去varargs的0参数功能。
有什么办法吗?
Varargs参数实际上是一个数组参数,由编译器和某些其他工具进行特殊处理。因此,不能将其用作带有反射的varargs参数-必须将其用作数组。
有更灵活的方法来处理方法-包中的MethodHandle
类java.lang.invoke
。使用方法句柄,您不仅可以调用此方法,还可以转换参数以使用与方法签名不同的类型。
要使用varargs构造函数,您可以执行以下操作:
MethodHandle constructor = MethodHandles.publicLookup().findConstructor(Foo.class, Object[].class);
constructor.invoke(new Object(), 1, "");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句