一般问题是:
- 使用语法
object::aMethod
时,能不能转换成MethodHandle
函数式接口之类的类型? - 如果不是,如果可能的话,如何在 Java 8 中间接调用方法引用?
例如,假设我们想要一个MethodRefRunner
as:
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 专家注意事项:请根据需要细化问题的标题。