Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reference to method of a particular instance in Kotlin

Tags:

lambda

kotlin

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) } 
like image 474
Kirill Rakhman Avatar asked Jan 19 '15 10:01

Kirill Rakhman


People also ask

How do I call a method in Kotlin?

Before you can use (call) a function, you need to define it. To define a function in Kotlin, fun keyword is used. Then comes the name of the function (identifier). Here, the name of the function is callMe .

What is function reference in Kotlin?

A function reference is typically used to pass an expression or set of instructions from one part of your code to another. There are a few other ways to accomplish this in Kotlin.

What is () -> unit in Kotlin?

Unit in Kotlin corresponds to the void in Java. Like void, Unit is the return type of any function that does not return any meaningful value, and it is optional to mention the Unit as the return type. But unlike void, Unit is a real class (Singleton) with only one instance.

What is member reference in Kotlin?

As already stated in a comment, your first map operation maps a reference to the field name in the class Student , which is then printed. Your second one maps the value of that field for each instance of Student .


1 Answers

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.

like image 63
hotkey Avatar answered Sep 19 '22 15:09

hotkey