web-dev-qa-db-ja.com

Kotlinの特定のインスタンスのメソッドへの参照

Java 8では、クラスのインスタンスのメソッドへの参照を持つことができます。ここに例があります

_Function1<Integer, Object> ref = a::getItem;
_

aは、メソッドObject getItem(int i)を持つクラスAdapterのインスタンスです。

Kotlinでも同じことができますか?私は成功せずに同じ構文を試しました。これまでのところ、次のような拡張メソッド参照を作成することしかできませんでした。

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

しかし、ここでは、それを呼び出すためにAdapterのインスタンスが必要です。私が見る他の代替案は、このようなラムダを定義しています:

_val ref: (Int) -> Any = { a.getItem(it) }
_
44
Kirill Rakhman

Kotlin 1.1以降では、 バインドされた呼び出し可能な参照 を使用してそれを行うことができます:

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

以前のKotlinバージョンにはこの機能がなく、 これらの単純なケース を除いて毎回ラムダを作成する必要があります。

22
hotkey