从Method对象获取方法引用

时间:2017-06-28 18:23:31

标签: java java-8

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

expectsMethodRef(obj::someMethod);

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

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

1 个答案:

答案 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;
        }
    } );