如何在kotlin中使用泛型编写lambdas?

xia*_*ang 10 generics lambda type-parameter kotlin

我可以写lambda id_Intid_Boolean显式类型.我可以identity用类型参数编写函数.我可以用类型参数写lambda吗?

fun testFuncInt(f: (Int) -> Int): Int = f(1) + 2

val id_Int = { x: Int -> x }

fun testFuncBoolean(f: (Boolean) -> Boolean): Boolean = !f(false)

val id_Boolean = { x: Boolean -> x }

fun <T> identity(x: T) = x

fun main(args: Array<String>) {
    println(testFuncInt(id_Int))
    println(testFuncInt(::identity))
    println(testFuncBoolean(id_Boolean))
    println(testFuncBoolean(::identity))
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ann 7

Kotlin不支持声明泛型属性而不在类级别声明该类型(另请参阅),但您可以使用返回与所需类型对应的lambda的函数来执行此操作:

fun main(args: Array<String>) {
    println(testFuncBoolean(id()))
    println(testFuncInt(id()))
}

fun <T> id(): (T) -> T = { it }

fun testFuncInt(f: (Int) -> Int): Int = f(1) + 2
fun testFuncBoolean(f: (Boolean) -> Boolean): Boolean = !f(false)
Run Code Online (Sandbox Code Playgroud)

  • “Kotlin 不支持通用属性之类的东西”我会改变这个措辞,因为这个陈述是不正确的。不过,又好又干净的解决方法。 (2认同)