Kotlin调用提供的类型为Unit的参数

问题描述 投票:0回答:3

我现在和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" }
}

或者怎么去呢?

java kotlin
3个回答
2
投票

使用普通方法调用。在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)
}

1
投票

onResult参数的行为类似于普通函数。你可以用onResult("Hello")来调用它。


0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.