gpt4 book ai didi

kotlin - 有什么方法可以在 Kotlin 中发送一个可为空的 Function 作为参数?

转载 作者:行者123 更新时间:2023-12-02 13:12:06 27 4
gpt4 key购买 nike

我正在尝试在 Kotlin 中使用公共(public)接口(interface) Function (正如我在 Java 中学到的那样)。

为此,我创建了我的方法

fun foo(input: List<String>, modifier1: Function<List<String>>? = null){

}

据我记得在这里我应该能够做到 modifier1.apply(input)
但似乎不可能(虽然可以做modifier1.apply{input})

阅读更多关于它的信息,我发现了这一点:

Kotlin: how to pass a function as parameter to another?

所以我将我的方法签名更改为:
fun foo(input:String,  modifier2: (List<String>) -> (List<String>){
}

在这里我可以做 modifier2(input)
我可以这样称呼 foo
service.foo(input, ::myModifierFunction)

在哪里
fun myModifierFunction(input:List<String>):List<String>{
//do something
return input
}

到目前为止,这似乎是可能的,但是将函数引用设为可为空是 Not Acceptable ,有什么办法可以做到吗?或使用功能?

最佳答案

您使用的是 kotlin.Function而不是 java.util.function.Function在你的第一个例子中。请注意,后者采用 2 种泛型类型:1 用于传入参数,1 用于结果参数。
apply您看到的方法是默认的 Kotlin 方法: apply ,而不是 Java 的 Function 之一-界面。

如果您真的想将 Java 函数设为可空类型,则以下内容应该可以工作:

fun foo(input: List<String>, modifier1: java.util.function.Function<List<String>, List<String>>? = null) {
modifier1?.apply(input) ?: TODO("what should be done if there wasn't passed any function?")
}

相同的 Kotlin 变体:
fun foo(input: List<String>, modifier1: ((List<String>) -> List<String>)? = null) {
modifier1?.invoke(input) ?: TODO("what should be done if there wasn't passed any function?")
}

也可能是一个默认函数,比如 { it }而不是 null可能更好地满足您的需求? (Java 变体将是 Function.identity() ):
// java   modifier1 : Function<List<String>, List<String>> = Function.identity()
// kotlin modifier1 : (List<String>) -> List<String> = { it }

关于kotlin - 有什么方法可以在 Kotlin 中发送一个可为空的 Function<T,R> 作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59715824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com