我现在和Kotlin有点挣扎。
在Java中,我要做的是:
public void doSomething(Consumer<String> onResult) {
...
onResult.accept("Hello");
}
现在,从我所听到的,在Kotlin,我这样做:
fun doSomething(onResult: (message: String) -> Unit) {
...
}
如何将值传递给onResult?
fun doSomething(onResult: (message: String) -> Unit) {
onResult.apply { "Hello" }
}
或者怎么去呢?
使用普通方法调用。在doSomething
方法中,您的参数是一个函数。因此,您可以使用onResult("Hello");
将值传递给传入函数
fun mainMethod(m: String, functionAsParam: (m: String) -> Unit) {
functionAsParam(m)
}
// my function to pass into the other
fun functionAsParam(m: String) {
println("my message: $m")
}
只是一个想法;
//Also you can call like this method
fun tryMySolution() {
mainMethod("hi", ::functionAsParam)
}
onResult
参数的行为类似于普通函数。你可以用onResult("Hello")
来调用它。
您可以使用invoke
方法来调用参数函数或只是调用函数:
fun main(args: Array<String>) {
doSomething{ s -> println(s)}
doSomething{ s -> println("You entered $s")}
}
fun doSomething(onResult: (message: String) -> Unit) {
onResult("bla") // Invoke the passed function with a specific string
// Note that onResult.invoke("bla") also does the same thing.
}
这将打印:
bla
You entered bla