gpt4 book ai didi

java - 如何在 Java 8 中间接运行方法引用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:16 27 4
gpt4 key购买 nike

一般的问题是:

  • 在使用语法object::aMethod时,是否可以将其转换为MethodHandle等类型作为函数式接口(interface)?
  • 如果不是,如何在 Java 8 中尽可能间接调用方法引用?

举个例子,假设我们想要一个 MethodRefRunner 作为:

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 但限制非常多。作为this answer提到,在版本 b75 之前,有一个 java.util.function.Block 可用并且可能很方便。

另一方面,WHATTYPE 是否有可能以某种方式转换为 java.lang.invoke.MethodHandle

注意 Java 专家:请根据需要细化问题的标题。

最佳答案

我不认为有任何方法可以做你想做的事。 WHATTYPE 必须是一个函数式接口(interface)——不一定是 Function,而是一个其单一抽象方法与 somemethod 相匹配的接口(interface)。它是一种普通的接口(interface)类型,服从管理 Java 类型的通常规则。 java.util.function.Block 是一个像这样的普通接口(interface)类型,并不像您想象的那样特殊。 (顺便说一句,它仍然存在,现在称为 Consumer。)

关于java - 如何在 Java 8 中间接运行方法引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com