通过函数式接口方法签名获取类构造函数

问题描述 投票:0回答:2

我知道我可以使用构造函数引用作为高阶方法的参数,如下所示:

collection.stream().map(MyClass::new);

但是我有

MyClass
作为变量
Class<MyClass> clazz = MyClass.class
。 我可以使用它来将构造函数引用传递给
.map(Function)
方法吗? 我想做这样的事情,有什么办法吗?

Class<MyClass> clazz = MyClass.class;
collection.stream().map(clazz.getConstructor())
java reflection functional-interface
2个回答
0
投票

标准免责声明: 使用反射几乎总是一个坏主意。

最好选择标准的抽象工厂或类似的。

但是,

MethodHandle
将以最小的开销构造所需的
Function
对象(我认为)。如果您每次都查找
fn
,则会产生开销。

    Function<T, R> fn = (Function<T, R>)
        MethodHandleProxies.asInterfaceInstance(
            Function.class,
            MethodHandles.lookup().findConstructor(clazz,
               MethodType.methodType(Void.TYPE, tClass)
           )
        );

异常处理被省略。


-1
投票

在软件设计中,RequestExecutor(或任何其他组件)在构造函数中的放置可能会有所不同,具体取决于开发人员或开发团队所做的特定设计模式和架构选择。但是,出于一些常见原因,可能会在对象创建级别将 RequestExecutor 或类似组件放置在构造函数中: 依赖注入:将RequestExecutor放在构造函数中通常是实现依赖注入的一种方法。依赖注入是一种设计模式,它通过从外部传递组件的依赖关系(例如 RequestExecutor)而不是在类中创建它们来促进组件之间的松散耦合。这使得类更加灵活、可测试,并且允许您轻松交换 RequestExecutor 的不同实现,而无需修改类本身。 可配置性:通过构造函数注入RequestExecutor,您可以在创建时配置对象的行为。同一类的不同实例可以有不同的 RequestExecutor 实现或配置,允许您根据特定需求定制它们的行为。 可测试性:将像 RequestExecutor 这样的依赖项放在构造函数中可以更轻松地编写单元测试。您可以在测试类时提供 RequestExecutor 的模拟或存根实现,使您能够隔离类的行为并确保其在不同场景下正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.