48

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) }
4
  • 11
    Capturing references are not supported yet, but will be supported in the future Commented Jan 19, 2015 at 11:32
  • possible duplicate of Kotlin: how to pass a function as parameter to another? Commented Feb 26, 2015 at 23:40
  • 1
    Your option using a lambda is the current best method as-of 1.0, although it will change in the future to be supported as @AndreyBreslav mentions Commented Dec 31, 2015 at 11:38
  • 1
    Watch this issue in YouTrack for updates: youtrack.jetbrains.com/issue/KT-6947 Commented Dec 31, 2015 at 11:38

1 Answer 1

25

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for the proposal link. For a Companion object's function, only this syntax seems to work [with Kotlin 1.3]: (ClassA)::function or ClassA.Companion::function. The first one can only be used in Kotlin, so for consistency between Java and Kotlin code, better to use the second syntax if you need to reference it in Java as well.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.