2017-10-14 1 views
0

Je suis plutôt nouveau à Kotlin et j'essaie toujours de comprendre.
Disons que j'ai cette interface:Exécution de la méthode sur l'objet kotlin

interface A{ 
    fun add() 
} 

J'ai une fonction et quelque chose qui implémente cette interface:

val calc = /*Something that implements interface A*/ 
fun op(func:()->Unit){ 
     //Some code 
} 

Enfin, dans ma fonction principale, j'ai ceci:

fun main(args:Array<String>){ 
    op(A::add) 
} 

Existe-t-il un moyen pour que la fonction op exécute la fonction donnée en utilisant la valeur calc? (En supposant que la fonction donnée existe)

+0

Modifier 'op (A :: ajouter)' à op (calc :: ajouter) ' – BakaWaii

Répondre

0

Je pense que vous voulez écrire quelque chose comme ceci:

interface A{ 
    fun add() 
} 

class AImpl: A { 
    override fun add() { 
     println("Hello, Aimpl") 
    } 
} 

val calc = AImpl() 
fun op(func: A.()->Unit){ 
    calc.func() 
} 

fun main(args: Array<String>) { 
    op(A::add) 
} 

Ceci est appelé Fonction littérales avec récepteur en Kotlin. La documentation pertinente est la suivante: https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver

Dans ce cas, vous fournissez une fonction Lambda en tant que paramètre pouvant être appelé sur tous les objets A. Et dans la fonction op j'appelle cette méthode sur l'objet calc.