我想获取在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吗?
答案 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)
}
}