Kotlin使用Java回调接口

我有一个WebView。 我想打电话

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

这个方法。

这里是ValueCallback接口:

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

这是我的kotlin代码:

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

任何人有想法重写kotlin的onReceiveValue方法? 我试过“转换Java到Kotlin”,但结果是下一个:

 v.evaluateJavascript("e") { } 

谢谢!

以下行称为SAM转换 :

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

只要Java接口有一个方法,Kotlin允许你传入一个lambda表达式,而不是一个实现该接口的对象。

由于lambda是evaluateJavascript函数的最后一个参数,所以可以将它移动到括号外,这就是Java到Kotlin转换所做的:

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

你已经是 你的大括号之间的内容是onReceive函数的内容。 Kotlin自动处理来自Java的SAM转换。 以下所有都是相同的。

 // 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) } })