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

对Kotlin中特定实例的方法的引用

越鸿才
2023-03-14

在Java8中,我们可以引用Class实例的方法

Function1<Integer, Object> ref = a::getItem;

a是类适配器的一个实例,其方法是对象getItem(int i)

我们能在科特林做同样的事吗?我尝试了同样的语法,但没有成功。到目前为止,我只能创建一个扩展方法引用,如下所示:

val ref: Adapter.(Int) -> Any = Adapter::getItem

但在这里,我仍然需要一个适配器的实例来调用它。我看到的另一个备选方案是这样定义lambda:

val ref: (Int) -> Any = { a.getItem(it) }

共有1个答案

子车睿
2023-03-14

自Kotlin 1.1以来,您可以使用绑定的可调用引用来实现这一点:

val f = a::getItem
list.forEach(myObject::myMethod)

早期的Kotlin版本没有这个功能,除了这些简单的情况外,每次都需要创建一个lambda。

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

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

  • oracle Java8文档定义了4种可以用来代替Lambda表达式的方法引用类型。我试图理解的是描述为“对特定类型的任意对象的实例方法的引用”的方法引用,它被写成。 任意对象必须是函数接口的抽象方法的第一个参数。 方法引用的签名必须与函数接口的抽象方法的签名相同,没有第一个参数。 因此,具有抽象方法的函数接口只能传递实例方法引用或。例如,我无法传递,其中它是类的实例,其签名为。 是否还有其他案例

  • 本文向大家介绍使用Java8中的方法引用来引用实例方法,包括了使用Java8中的方法引用来引用实例方法的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式中的名称来调用/引用和现有方法。 语法 以下是在Java中引用实例方法的语法

  • 假设我让玩家创建团队并创建团队调用团队类的新实例,该实例具有称为成员的数组列表。 现在在主课堂上,我如何在被邀请后将球员添加到团队中?我在team类中有一个addPlayer方法,只需将它们添加到arraylist中,但是如果teams类当前有多个实例(其他玩家创建了团队),它怎么知道要加入哪一个呢? 我在teamLeader的Teams类中有一个变量,在创建实例时设置该变量,如果这可以帮助我编辑

  • 本文向大家介绍Kotlin中Stack与LinkedList的实现方法示例,包括了Kotlin中Stack与LinkedList的实现方法示例的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要介绍的是关于Kotlin 实现基本的数据结构 Stack 和 LinkedList,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 Stack Java中Stack由List实现,Ko