Kotlin-从lambda表达式获取名称

Kotlin-从lambda表达式获取名称,kotlin,Kotlin,我想获取传递到Kotlin中lambda表达式中的参数的名称。在C#中,我会使用表达式来获取参数名,但我不确定这在Kotlin中是否可行 import java.util* 趣味主线(args:Array){ val foo=foo() foo.bar{it.age} //应该打印“年龄” } 数据类模型(val-id:UUID,val-name:String,val-age:Int) 福班{ 娱乐条(表达式:(x:T)->任意){ println(/*参数的名称*/) } } 在Kotlin

我想获取传递到Kotlin中lambda表达式中的参数的名称。在C#中,我会使用
表达式
来获取参数名,但我不确定这在Kotlin中是否可行

import java.util*
趣味主线(args:Array){
val foo=foo()
foo.bar{it.age}
//应该打印“年龄”
}
数据类模型(val-id:UUID,val-name:String,val-age:Int)
福班{
娱乐条(表达式:(x:T)->任意){
println(/*参数的名称*/)
}
}

在Kotlin中可以这样做吗?

如果要传递属性并打印它们的名称,可以使用:

fun main(args:Array){
val foo=foo()
foo.bar(型号::年龄)
}
福班{
趣味酒吧(p:KProperty){
println(p.name)
}
}

如果要传递属性并打印它们的名称,可以使用:

fun main(args:Array){
val foo=foo()
foo.bar(型号::年龄)
}
福班{
趣味酒吧(p:KProperty){
println(p.name)
}
}

您的意思是要传递一个属性,该属性应打印哪个名称?因为年龄不是一个“参数”here@s1m0nw1…是(我想?)尝试直接传递KProperty(更改参数类型)并在栏中使用其名称。作为如下参数传递:foo.bar(foo::age)@s1m0nw1不确定您的意思,您介意提供一个答案吗?我回答了,但目前无法测试:[您的意思是要传递一个属性,该属性的名称应打印出来吗?因为age不作为“参数”here@s1m0nw1…是的(我想?)尝试直接通过KProperty(更改参数类型)并在bar.Passed中使用其名称作为参数,如下所示:foo.bar(foo::age)@s1m0nw1不确定您的意思,您介意提供答案吗?我提供了答案,但当前无法测试:[这几乎有效,除了你不能通过
foo::age
,因为
age
Model
Model::age的一个属性,那么?很可能不是你想要实现的,我担心是的。这可能不是我想要的,但它完成了工作!这几乎有效,除非你不能通过
foo::age
,因为
age
I那是
Model
Model::age的一个属性吗?很可能不是你想要的,我很担心是的。这可能不是我想要的,但它确实起作用了!
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*/)
    }
}
fun main(args: Array<String>) {
    val foo = Foo<Model>()
    foo.bar(Model::age)
}

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