Kotlin 使用 Java 回调接口
Kotlin use Java callback interface
我有一个 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);
};
这是我的科特林代码:
webView.evaluateJavascript("a", ValueCallback<String> {
// cant override function
})
有人知道在 kotlin 中重写 onReceiveValue 方法吗?
我尝试了 "Convert Java to Kotlin" 但结果是下一个:
v.evaluateJavascript("e") { }
谢谢!
下一行称为 SAM conversion:
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)
}
})
我有一个 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);
};
这是我的科特林代码:
webView.evaluateJavascript("a", ValueCallback<String> {
// cant override function
})
有人知道在 kotlin 中重写 onReceiveValue 方法吗? 我尝试了 "Convert Java to Kotlin" 但结果是下一个:
v.evaluateJavascript("e") { }
谢谢!
下一行称为 SAM conversion:
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)
}
})