参考Kotlin中特定实例的方法

Kir*_*man 43 lambda kotlin

在Java 8中,我们可以引用Class实例的方法.这是一个例子

Function1<Integer, Object> ref = a::getItem;
Run Code Online (Sandbox Code Playgroud)

a是Adapter具有该方法的类的实例Object getItem(int i).

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

val ref: Adapter.(Int) -> Any = Adapter::getItem
Run Code Online (Sandbox Code Playgroud)

但是在这里我仍然需要一个实例Adapter来调用它.我看到的另一个变化是定义一个像这样的lambda:

val ref: (Int) -> Any = { a.getItem(it) }
Run Code Online (Sandbox Code Playgroud)

hot*_*key 22

从Kotlin 1.1开始,您可以使用绑定的可调用引用来执行此操作:

val f = a::getItem
Run Code Online (Sandbox Code Playgroud)

list.forEach(myObject::myMethod)
Run Code Online (Sandbox Code Playgroud)

早期的Kotlin版本没有此功能,除了这些简单的情况外,每次都要求你制作一个lambda .