Cuál sería el equivalente de ese código en kotlin, nada parece funcionar de lo que intento:

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

En eso:

AnInterface impl = (inst, num) -> {
    //...
}
24
Jocky Doe 16 ene. 2018 a las 18:44

3 respuestas

La mejor respuesta

Si AnInterface es Java, puede trabajar con conversión SAM:

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

De lo contrario, si la interfaz es Kotlin ...

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

... puede usar la sintaxis object para implementarla de forma anónima:

val impl = object : AnInterface {
    override fun doSmth(inst:, num: Int) {
        //...
    }
}
25
s1m0nw1 16 ene. 2018 a las 16:01

Si está reescribiendo tanto la interfaz como sus implementaciones en Kotlin, debe eliminar la interfaz y usar un tipo funcional:

val impl: (MyClass, Int) -> Unit = { inst, num -> ... }
17
Marko Topolnik 16 ene. 2018 a las 17:16

Puede usar una expresión de objeto

Entonces se vería algo así:

val impl = object : AnInterface {
    override fun(doSmth: Any, num: Int) {
        TODO()
    }
}
2
hudsonb 16 ene. 2018 a las 16:02