Как создать замыкание в Kotlin, которое принимает любой тип параметра и дает любой тип переменной в качестве возвращаемого значения? - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь создать замыкание, которое принимает объект любого типа, а после изменения дает объект другого типа. Я пытался так;

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 голосов
/ 28 июня 2019

Проблема с test: Int из foo:

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

foo требует test, чтобы быть Int.Если вы вызываете foo с параметром типа Any?, он может быть нулевым или иметь тип, подобный String.Но это не сработает.Поэтому, если вы объявите его как test: Any?, ваш код скомпилируется.

...