我有一个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") { }
谢谢!
答案 0 :(得分:7)
以下行称为SAM conversion:
v.evaluateJavascript("e", { value ->
// Execute onReceiveValue's code
})
每当Java接口只有一个方法时,Kotlin允许您传入lambda而不是实现该接口的对象。
由于lambda是evaluateJavascript
函数的最后一个参数,你可以将它移到括号之外,这就是Java to Kotlin转换的作用:
v.evaluateJavascript("e") { value ->
// Execute onReceiveValue's code
}
答案 1 :(得分:6)
你已经是。大括号之间的内容是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)
}
})