Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法发送一个可为null的函数<;T、 R>;作为Kotlin中的参数?_Kotlin - Fatal编程技术网

有没有办法发送一个可为null的函数<;T、 R>;作为Kotlin中的参数?

有没有办法发送一个可为null的函数<;T、 R>;作为Kotlin中的参数?,kotlin,Kotlin,我正在尝试在Kotlin中使用公共接口函数(正如我在Java中学习的那样) 为此,我创建了我的方法 fun foo(input: List<String>, modifier1: Function<List<String>>? = null){ } 在这里我可以做modifier2(输入) 我可以这样叫福 service.foo(input, ::myModifierFunction) 在哪里 fun myModifierFunction(input:L

我正在尝试在Kotlin中使用公共接口函数(正如我在Java中学习的那样)

为此,我创建了我的方法

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

}
在这里我可以做
modifier2(输入)

我可以这样叫福

service.foo(input, ::myModifierFunction)
在哪里

fun myModifierFunction(input:List<String>):List<String>{
   //do something
   return input
}
funmyModifierFunction(输入:List):List{
//做点什么
返回输入
}

到目前为止,这似乎是可能的,但将函数引用设为可空是不可接受的,有什么方法可以做到这一点吗?或者使用函数?

您在第一个示例中使用的是
kotlin.Function
,而不是
java.util.Function.Function
。注意,后者采用2种泛型类型:1种用于传入参数,1种用于结果参数

您看到的
apply
方法是默认的Kotlin one:,而不是Java的
函数
-接口

如果您真的想将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.Function
,而不是
java.util.Function.Function
。注意,后者采用2种泛型类型:1种用于传入参数,1种用于结果参数

您看到的
apply
方法是默认的Kotlin one:,而不是Java的
函数
-接口

如果您真的想将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?")
}

如果要传入以
List
为参数且未返回任何有意义的函数,则类型为
Function1
。调用函数的方法名是
invoke()
,如果不能为空,也可以使用普通括号。总而言之,您的代码可能如下所示:

fun foo(input: List<String>, modifier1: Function1<List<String>, Unit>? = null) {
    modifier1?.invoke(input)
}
fun foo(输入:列表,修饰符1:Function1?=null){
modifier1?调用(输入)
}
Function1
类型名称中的
1
表示它是一个单参数函数,还有
Function0
Function2


类型本身不是可以用来调用该函数的,因为它是一个空的标记接口。所有函数都实现了这一点,无论它们有多少个参数。

如果要传入一个函数,该函数以
列表
为参数,并且不返回任何有意义的内容,则类型为
Function1
。调用函数的方法名是
invoke()
,如果不能为空,也可以使用普通括号。总而言之,您的代码可能如下所示:

fun foo(input: List<String>, modifier1: Function1<List<String>, Unit>? = null) {
    modifier1?.invoke(input)
}
fun foo(输入:列表,修饰符1:Function1?=null){
modifier1?调用(输入)
}
Function1
类型名称中的
1
表示它是一个单参数函数,还有
Function0
Function2


类型本身不是可以用来调用该函数的,因为它是一个空的标记接口。所有函数都实现了这一点,不管它们有多少个参数。

您可以简单地使用
使引用为空-唯一的问题是整个函数类型需要首先在参数中:

fun foo(input: String,  modifier2: ((List<String>) -> List<String>)? = null) {
}
fun-foo(输入:字符串,修饰符2:((列表)->List)?=null){
}
根据需要,
modifier2
是可选的;如果指定,它可能包含null,或者它可能包含一个获取并返回字符串列表的函数


正如在另一个答案中提到的,
kotlin.Function
java.util.Function.Function
不同,尽管在实践中,您不需要直接引用它们,由于
->
表示法更简单。

您可以使用
简单地使引用为空-唯一的问题是整个函数类型需要首先在parens中:

fun foo(input: String,  modifier2: ((List<String>) -> List<String>)? = null) {
}
fun-foo(输入:字符串,修饰符2:((列表)->List)?=null){
}
根据需要,
modifier2
是可选的;如果指定,它可能包含null,或者它可能包含一个获取并返回字符串列表的函数


正如在另一个答案中提到的,
kotlin.Function
java.util.Function.Function
不一样-尽管在实践中你不应该直接引用它们,因为
->
符号更简单。

谢谢你的回答,我有一个疑问…为什么要使用“it”在这种情况下比空值好吗?可能不会更好。。。它只是省略了可为null的函数类型,并传递了一个有效的默认值(~identity函数)。可能是个人喜好。。。如果您使用不可为空的变量,您还可以
内联
通常推荐用于具有函数参数类型的函数的函数。感谢您的回答,我有一个疑问…为什么在这种情况下“it”比null更好?它可能不会更好。。。它只是省略了可为null的函数类型,并传递了一个有效的默认值(~identity函数)。可能是个人喜好。。。如果使用该不可为空的变量,则还可以
内联
函数,该函数通常推荐用于具有函数参数类型的函数。