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) }
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 .
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.
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.
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 .
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With