当前位置: 首页 > 面试题库 >

如何在Java 8中间接运行方法参考?

全流觞
2023-03-14
问题内容

一般问题是:

  • 使用语法时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)

在以上代码段中,一种选择WHATTYPEjava.util.function.Function但非常严格。正如这个答案所提到的,在b75版本之前,有一个java.util.function.Block可用的并且可能很方便。

另一方面,任何WHATTYPE可能以某种方式转换为的机会java.lang.invoke.MethodHandle

__Java专家 注意事项 :请根据需要改进问题的标题。


问题答案:

我认为没有任何方法可以做您想要的。WHATTYPE将必须是一个功能接口—不一定是Function,而是一个其单个抽象方法与之匹配的接口somemethod。它是一种普通的接口类型,但要遵守管理Java类型的常规规则。
java.util.function.Block是这样的普通接口类型,在您看来的方式上并不特殊。(顺便说一下,它仍然存在Consumer。)



 类似资料:
  • 我有一个微服务,它会收到一条消息,大概是这样的: 是否有任何开箱即用的解决方案允许方法每天在给定时间运行?使用 Spring 中的 cron 不涉及在运行时更改时间。我需要使用更灵活的选项(更改运行时,多次启动) 谢谢!

  • 我正在为Java8证书做准备,下面的内容让我有点困惑,也许有人能帮我?在这个例子中,一个Squirrel类被建模。它有一个名称和一个权重。现在你可以创建一个比较器类来使用这两个字段对它进行排序。所以首先按名称排序,然后按权重排序。类似于这样: 到现在为止,一直都还不错。。但接下来是令人困惑的部分。在代码示例下面,它们声明您可以使用方法链接在一行中编写此代码。也许我误解了,但当我将比较部分和then

  • 主要内容:1 Java8 方法参数反射的介绍,2 Method类,3 Method类的方法,4 Parameter类,5 Parameter类的方法,6 Java8 方法参数反射的案例1 Java8 方法参数反射的介绍 Java提供了一项新功能,您可以在其中获得任何方法或构造函数的形式参数的名称。java.lang.reflect包包含所有必需的类,例如Method和Parameter,可用于参数反射。 2 Method类 Method类提供有关类或接口上的单个方法的信息。反射的方法可以是类方法

  • 我想运行我的gui,但是我不知道如何初始化这个类。我正在从python过渡到Java,所以我对这个还是相当陌生。代码有效,我只需要知道如何运行它。 如何在静态void main(String[] args)下运行init()方法?

  • 如果可以在该代码中运行onCreate方法,我认为应该有类似的代码

  • 我对方法引用在Java8中是如何工作的有些困惑。我编写了下面的代码段用于过滤文件夹中的隐藏文件。他们正在产生正确的结果。我不理解->listFiles方法的方法签名是如何在这个代码段的选项2中工作的。 这是我在Java8文档中发现的