【发布时间】:2021-01-21 13:12:39
【问题描述】:
我知道我可以像这样使用构造函数引用作为高阶方法的参数:
collection.stream().map(MyClass::new);
但我有MyClass 作为变量Class<MyClass> clazz = MyClass.class。
我可以使用它将构造函数引用传递给.map(Function) 方法吗?
我想做这样的事情,有办法吗?
Class<MyClass> clazz = MyClass.class;
collection.stream().map(clazz.getConstructor())
【问题讨论】:
-
取决于你想多努力。最简单:
clazz.getConstructor(Param.class)::newInstance- 但这要求功能接口可以抛出一些异常。 -
@JohannesKuhn 的重点是自动推断构造函数签名。
-
嗯,不。做不到。
-
当你有一个
Class实例时,它可能代表一个你不能实例化的抽象类或接口,它可能代表一个不允许创建更多实例或一个enum类型类型没有匹配的构造函数或构造函数不可访问。这些都不能在编译时检查。另一方面,选择正确构造函数所需的推断通用签名在运行时不可用。
标签: java reflection functional-interface