Dans Java 8, nous pouvons avoir une référence à une méthode d’une instance de Class. Voici un exemple
Function1 ref = a::getItem;
a est une instance de la classe Adapter
qui possède la méthode Object getItem(int i)
.
Pouvons-nous faire la même chose à Kotlin? J’ai essayé la même syntaxe sans succès. Jusqu’à présent, je n’ai pu créer qu’une référence de méthode d’extension comme ceci:
val ref: Adapter.(Int) -> Any = Adapter::getItem
Mais ici, j’ai encore besoin d’une instance d’un Adapter
pour l’invoquer. L’autre alternative que je vois est la définition d’un lambda comme ceci:
val ref: (Int) -> Any = { a.getItem(it) }
Depuis Kotlin 1.1, vous pouvez utiliser les références appelables liées pour faire cela:
val f = a::getItem
list.forEach(myObject::myMethod)
Les versions antérieures de Kotlin n’ont pas cette fonctionnalité et vous obligent à créer un lambda à chaque fois, sauf pour ces cas simples .