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