从 Method 对象获取 Method 引用

A1m*_*A1m 0 java java-8

我有一个需要方法引用的方法:

expectsMethodRef(obj::someMethod);
Run Code Online (Sandbox Code Playgroud)

我现在只在编译时通过反射检索方法。如何从 Method 对象获取方法引用?

Method method = obj.class.getMethod(methodNameStr);
expectsMethodRef(<how to input my method here?>);
Run Code Online (Sandbox Code Playgroud)

tso*_*akp 5

您只需要使用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);
}
Run Code Online (Sandbox Code Playgroud)

这是您如何使用普通 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;
        }
    } );
Run Code Online (Sandbox Code Playgroud)