Estoy convirtiendo parte de mi código Java a Kotlin y no entiendo cómo instanciar interfaces que están definidas en el código de Kotlin. Como ejemplo, tengo una interfaz (definida en el código Java):
public interface MyInterface {
void onLocationMeasured(Location location);
}
Y luego, en mi código de Kotlin, ejemplifico esta interfaz:
val myObj = new MyInterface { Log.d("...", "...") }
y funciona bien Sin embargo, cuando convierto MyInterface a Kotlin:
interface MyInterface {
fun onLocationMeasured(location: Location)
}
Recibo un mensaje de error: Interface MyListener does not have constructors
cuando intento crear una instancia, aunque me parece que nada ha cambiado excepto la sintaxis. ¿No entiendo cómo funcionan las interfaces en Kotlin?
Location -> Unit
) en lugar de interfaces de un solo método, si es posible, ¿es correcto?La mejor solución es usar un typealias en lugar de su interfaz Java
typealias MyInterface = (Location) -> Unit
Regístralo así:
o incluso más limpio
Invocarlo así:
Las 3 opciones actuales parecen ser:
Al convertir nuestras bibliotecas a Kotlin, en realidad dejamos todas las interfaces en código Java, ya que era más limpio llamar a Java desde Kotlin que a Kotlin desde Kotlin.
fuente
Intenta acceder a tu interfaz así:
fuente
si tienes una clase de Java como esta:
deberías convertir este código de Java a Kotlin así:
convertir la interfaz de Java :
al estilo de interfaz Kotlin :
fuente
Si la interfaz es para un método de escucha de una clase, cambie la definición de la interfaz al tipo de función. Eso hace que el código sea más conciso. Ver lo siguiente.
Clase que contiene la definición del oyente
Otra clase
fuente
fuente