将方法转换为函数式接口函数<T, R>?

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

假设我有一个属性文件:

methods.case1=m1
methods.case2=m2
...
methods.casen=mn

在运行时,我可以使用类似的方法获得所需的方法:

//m1
String case1Method = config.getString("methods.case1");
Method m = MyClass.class.getMethod(case1Method, <parameters>);

我想将此方法作为功能接口 Function 传递给构造函数并按如下方式使用它:

public foo(Function<T,R> function, ... ) {
     this.function = function;
}

public String bar(String input) {
     String result = function.apply(input);
     ...
}

class.getMethod() 返回一个方法值。是否可以将 Method 对象转换为 Function 值?

或者,我可以直接从属性文件中确定 Function 值吗?我的猜测是否定的,这就是为什么我希望直接从我的属性文件中确定一个方法,然后将该方法转换为 Function,然后传递给我的 foo 函数

我尝试过使用 LambdaMetafactory 和反射,尽管我不确定我是否完全理解这个用例的反射。

java function methods java-8 functional-interface
1个回答
2
投票

如果你有一个

Method
引用,你可以用
Method#invoke
调用它。
Function<T,R>
是 SAM 类型(单一抽象方法),可以分配一个 lambda。结合两者:

final Function<T, R> fun = t -> (R)method.invoke(obj, t, ...);
© www.soinside.com 2019 - 2024. All rights reserved.