Java:可变参数声明的构造函数

标签 java design-patterns factory variadic-functions

我正在尝试使用工厂设计模式来实例化对象。虽然构造函数有一个可变参数。

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);
}

但是我会失去可变参数的 0 参数功能。

有什么办法可以做到这一点吗?

最佳答案

Varargs 参数实际上是一个数组参数,编译器和其他一些工具对其进行了特殊处理。因此,您不能将其用作具有反射的可变参数参数 - 您必须将其用作数组。

有更灵活的方法来处理方法 - MethodHandle来自 java.lang.invoke 包的类。使用方法句柄,您不仅可以调用该方法,还可以转换参数以使用与方法签名不同的类型。

要使用可变参数构造函数,您可以这样做:

MethodHandle constructor = MethodHandles.publicLookup().findConstructor(Foo.class, Object[].class);
constructor.invoke(new Object(), 1, "");

关于Java:可变参数声明的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27036047/

相关文章:

java - 动态切换咖啡因缓存上的记录统计数据

java - 无法更改 ActionListener 内的 JButton ActionCommand

java - 消除单例

java - 如何使用 apache.commons 中的 Factory?

Java : using graphics component within an action listener

iOS MVC - 数据类型转换发生在哪里?

javascript - 什么是 "Enterprise JavaScript"?

design-patterns - 如何使用工厂模式解析多个第三方api

c++ - 如何实现具有多个开关的工厂?

java - XMLPullParser 解析器无法解析 xml 标记内的 "(??????) [????] &middot;"