web-dev-qa-db-fra.com

Implémentation Lambda de l'interface en kotlin

Quel serait l'équivalent de ce code dans kotlin, rien ne semble fonctionner de ce que j'essaye:

public interface AnInterface {
    void doSmth(MyClass inst, int num);
}

init:

AnInterface impl = (inst, num) -> {
    //...
}
10
Jocky Doe

Si AnInterface est Java, vous pouvez travailler avec Conversion SAM :

val impl = AnInterface { inst, num -> 
     //...
}

Sinon, si l'interface est Kotlin ...

interface AnInterface {
     fun doSmth(inst: MyClass, num: Int)
}

... vous pouvez utiliser la syntaxe object pour l'implémenter anonymement:

val impl = object : AnInterface {
    override fun doSmth(inst:, num: Int) {
        //...
    }
}
12
s1m0nw1

Si vous réécrivez l'interface et ses implémentations dans Kotlin, vous devez simplement supprimer l'interface et utiliser un type fonctionnel:

val impl: (MyClass, Int) -> Unit = { inst, num -> ... }
9
Marko Topolnik

Vous pouvez utiliser une expression object

Cela ressemblerait à quelque chose comme ça:

val impl = object : AnInterface {
    override fun(doSmth: Any, num: Int) {
        TODO()
    }
}
2
hudsonb