当前位置: 首页 > 知识库问答 >
问题:

“引用特定类型的任意对象的实例方法”的方法如何解析该任意对象?[副本]

赖翰
2023-03-14

oracle Java8文档定义了4种可以用来代替Lambda表达式的方法引用类型。我试图理解的是描述为“对特定类型的任意对象的实例方法的引用”的方法引用,它被写成containingType::methodName

  1. 任意对象必须是函数接口的抽象方法的第一个参数。
  2. 方法引用的签名必须与函数接口的抽象方法的签名相同,没有第一个参数。

因此,具有抽象方法a方法(B B,C C,D D)的函数接口只能传递实例方法引用X::MethodIMPLB::MethodIMPL。例如,我无法传递C::methodImpl,其中它是类C的实例,其签名为A methodImpl(B B,D D)

是否还有其他案例我遗漏了,这可能是甲骨文以如此模棱两可的方式写这篇文章的原因?

共有1个答案

严锐
2023-03-14

不,你的理解是正确的。您链接的文档暗示(但没有充分强调),给定需要参数A1,a2,a3,...的函数接口,此类型的方法引用等同于调用A1.NamedMethod(a2,a3,...)的lambda。

请注意,为了一致性起见,需要这样一个具体的定义--给出了带有两个String参数(字符串s1,字符串s2)的函数接口链接文档的示例,您如何确定行为是s1.dothing(s2)还是s2.dothing(s1)

您可以在jls:

如果编译时声明是实例方法,则方法调用表达式的参数(如果有)是调用方法的第二个和随后的形参。否则,方法调用表达式的参数是调用方法的形参。

 类似资料:
  • oracleJava8留档定义了4种类型的方法引用,您可以使用它来代替Lambda表达式。我试图理解的是描述为:“引用特定类型的任意对象的实例方法”的那种方法引用,它被写为。 我不确定我是否错过了什么,但对我来说似乎更像是:“引用函数接口抽象方法的第一个参数,假设它是类型”。我试图提出这个“任意对象”是第二个参数的示例,但当然它不编译。 是否有官方参考编译器如何解析此对象?我的理解是否正确: 任意

  • 在Java8中有“方法引用”特性。其中一种是“对特定类型的任意对象的实例方法的引用” http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html#type 有人能解释一下在这种情况下“特定类型的任意对象”是什么意思吗?

  • 在Java8中有“方法引用”特性。其中一种是“对特定类型的任意对象的实例方法的引用” http://docs.oracle.com/javase/tutorial/java/javao/methodreferences.html#类型

  • 问题内容: 在Java 8中,具有“方法参考”功能。一种是“引用特定类型的任意对象的实例方法” http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html#type 有人可以解释在这种情况下“特定类型的任意对象”是什么意思吗? 问题答案: 它是对某种类型的实例方法的引用。在此示例中,是的方法。程序知道可以在的实例

  • 假设我有一段代码,可以创建一个具有给定名称的苹果实例 这条线可以被许多玩家调用,每个玩家都有一个Apple类的实例,在这个实例中,名称有点像ID 现在假设在Apple类中有一个ArrayList,它存储每个玩家的朋友 还有一个getter/setter用于更新和检索朋友,所以如果一个特定的玩家键入一个命令 /addfriend将一个朋友添加到他的特定实例数组列表中,我将如何做到这一点? 示例,更新

  • 我正在尝试使用OAS v2定义一个API,它将返回一个有效负载以及一些元数据。 换句话说,对API的响应将是: 有效负载可以是任何内容,并且在不同的场景下会有所不同,唯一的限制是它将是有效的JSON格式。因此,现在,我想将其定义为一个JSON对象,而不定义字段级别的细节。 如何在OAS2/JSON模式中做到这一点? 提前谢谢。