假设我有一个属性文件:
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
我尝试过使用 LambdaMetafactory 和反射,尽管我不确定我是否完全理解这个用例的反射。
如果你有一个
Method
引用,你可以用Method#invoke
调用它。 Function<T,R>
是 SAM 类型(单一抽象方法),可以分配一个 lambda。结合两者:
final Function<T, R> fun = t -> (R)method.invoke(obj, t, ...);