我有一个需要方法引用的方法:
expectsMethodRef(obj::someMethod);
我现在只在编译时使用反射检索方法。如何从Method对象获取方法引用?
Method method = obj.class.getMethod(methodNameStr);
expectsMethodRef(<how to input my method here?>);
答案 0 :(得分:4)
您只需使用Method.invoke
即可。这是一个例子:
public class SomeObject{
public String someMethod(){
return "Test";
}
}
public String expectsMethodRef( Function<SomeObject, String> f ){
SomeObject so = new SomeObject();
return f.apply(so);
}
以下是使用普通lambda和Method对象调用的方法。
//plain lmbda
expectsMethodRef( SomeObject::someMethod );
//with method object
Method someMethod = SomeObject.class.getMethod("someMethod");
expectsMethodRef( (so) -> {
try {
return (String)someMethod.invoke(so);
} catch (Exception e) {
return null;
}
} );