Kotlin utiliza la interfaz de callback de Java

Tengo un WebView. quiero llamar

public void evaluateJavascript(String script, ValueCallback<String> resultCallback) 

este método.

Aquí está la interfaz ValueCallback:

 public interface ValueCallback<T> { /** * Invoked when the value is available. * @param value The value. */ public void onReceiveValue(T value); }; 

Aquí está mi código de kotlin:

 webView.evaluateJavascript("a", ValueCallback<String> { // cant override function }) 

¿Alguien tiene idea para anular el método onReceiveValue en kotlin? Intenté el "Convertir Java a Kotlin", pero el resultado es el siguiente:

 v.evaluateJavascript("e") { } 

¡Gracias!

La siguiente línea se llama conversión SAM :

 v.evaluateJavascript("e", { value -> // Execute onReceiveValue's code }) 

Siempre que una interfaz Java tenga un único método, Kotlin le permite pasar una lambda en lugar de un object que implemente esa interfaz.

Dado que lambda es el último parámetro de la function evaluateJavascript , puede moverlo fuera de los corchetes, que es lo que hizo la conversión de Java a Kotlin:

 v.evaluateJavascript("e") { value -> // Execute onReceiveValue's code } 

Tú ya lo eres. El contenido entre sus llaves es el contenido de la function onReceive . Kotlin maneja automáticamente las conversiones SAM de Java. Todos los siguientes son equivalentes.

 // Use Kotlin's SAM conversion webView.evaluateJavascript("a") { println(it) // "it" is the implicit argument passed in to this function } // Use Kotlin's SAM conversion with explicit variable name webView.evaluateJavascript("a") { value -> println(value) } // Specify SAM conversion explicitly webView.evalueateJavascript("a", ValueCallback<String>() { println(it) }) // Use an anonymous class webView.evalueateJavascript("a", object : ValueCallback<String>() { override fun onReceiveValue(value: String) { println(value) } }) 
  • Clases de datos en Kotlin
  • Referencia no resuelta de Kotlin: println de gradle en la CLI
  • La inferencia del tipo Java lambda no funciona como se esperaba en Kotlin
  • Llame al object Kotlin con la delegación de class de Java como método estático
  • Clase abstracta Kotlin java IllegalAccessError
  • Choque de statement de plataforma con comparable
  • ¿Es posible build una aplicación web completa de Node.js usando Kotlin?
  • Sintaxis de Kotlin para inferir supertipo genérico de subtipo
  • Kotlin, estructura del proyecto
  • Jinq en Kotlin: ¿cómo convertir lambda en Java Serialized Lambda?
  • Asignación no permitida en la expresión while?