Kotlin - 从lambda表达式获取名称

时间:2018-02-16 11:24:54

标签: kotlin

我想获取在Kotlin中传递给lambda表达式的参数的名称。 在C#中我会使用Expression<Func<T, ...>>来获取参数名称,但我不确定这是否可以在Kotlin中

import java.util.*

fun main(args: Array<String>) {
    val foo = Foo<Model>()
    foo.bar { it.age }
    // Should print "age"
}

data class Model(val id: UUID, val name: String, val age: Int)

class Foo<T> {
    fun bar(expression: (x: T) -> Any) {
        println(/*The name of the parameter*/)
    }
}

这可能在Kotlin吗?

1 个答案:

答案 0 :(得分:2)

如果您想传递属性并打印其名称,可以使用KProperty来执行此操作:

fun main(args: Array<String>) {
    val foo = Foo<Model>()
    foo.bar(Model::age)
}

class Foo<T> {
    fun bar(p: KProperty<*>) {
        println(p.name)
    }
}