Reputation: 43811
In Java 8 we can have a reference to a method of a Class' instance. Here's an example
Function1<Integer, Object> ref = a::getItem;
a is an instance of the class Adapter
that has the method Object getItem(int i)
.
Can we do the same in Kotlin? I tried the same syntax without success. So far I was only able to create an extension method reference like so:
val ref: Adapter.(Int) -> Any = Adapter::getItem
But here I still need an instance of an Adapter
to invoke it. The other alterantive I see is defining a lambda like this:
val ref: (Int) -> Any = { a.getItem(it) }
Upvotes: 48
Views: 9454
Reputation: 147911
Since Kotlin 1.1, you can use bound callable references to do that:
val f = a::getItem
list.forEach(myObject::myMethod)
Earlier Kotlin versions don't have this feature and require you to make a lambda every time except for these simple cases.
Upvotes: 25