一般问题是:
- 使用语法
object::aMethod时,能不能转换成MethodHandle函数式接口之类的类型? - 如果不是,如果可能的话,如何在 Java 8 中间接调用方法引用?
例如,假设我们想要一个MethodRefRunneras:
class MethodRefRunner {
static void execute(Object target, WHATTYPE mref, Object... args) {
mref.apply(args);
}
}
它可以用作:MethodRefRunner.execute(o, o::someMethod, someParam)
在上面的代码片段中,一个选项WHATTYPE非常java.util.function.Function严格。正如这个答案所提到的,在 b75 版本之前,有一个java.util.function.Block可用的并且可能很方便。
另一方面,任何WHATTYPE可能以某种方式转换为java.lang.invoke.MethodHandle?
Java 专家注意事项:请根据需要细化问题的标题。