如何在Kotlin中创建一个闭包,该闭包采用任何类型的参数并提供任何类型的变量作为返回值?

时间:2019-06-28 13:21:54

标签: generics kotlin closures

我试图创建一个接受任何类型对象的闭包,将其变异后给出另一种对象。我这样尝试过

fun bar(fooFn: (Any?)->Any?): String {
    return fooFn(3) as String
}

val foo = { test: Int -> "Just Testing $test" }

fun main() {
    // I'm expecting this to print "Just Testing 3"
    println(bar(foo))
}

但是这会导致类型不匹配错误,并且无法编译。 如何实现呢?

1 个答案:

答案 0 :(得分:0)

问题出在test: Int中的foo

val foo = { test: Int -> "Just Testing $test" }

foo要求testInt。如果使用类型为foo的参数调用Any?,则该参数可能为null或类似String的类型。但这行不通。因此,如果您将其声明为test: Any?,则代码将编译。