Kotlin 如何从类引用或泛型类型获取属性引用?

Kotlin 如何从类引用或泛型类型获取属性引用?,kotlin,generics,reflection,Kotlin,Generics,Reflection,我正在尝试用nicesign()替换assign()方法: 类生成器(val kClass:kClass){ 乐趣分配(prop:KProperty1,value:K):Builder=TODO(“在这里做其他事情”) 任务分配(调用:KClass.(->Pair):生成器{ val(属性,值)=调用(kClass) 返回赋值(属性、值) } } val builder=builder(数据::类) assign(Data::someProperty,“somevalue”)/(1) build

我正在尝试用nicesign()替换assign()方法:

类生成器(val kClass:kClass){
乐趣分配(prop:KProperty1,value:K):Builder=TODO(“在这里做其他事情”)
任务分配(调用:KClass.(->Pair):生成器{
val(属性,值)=调用(kClass)
返回赋值(属性、值)
}
}
val builder=builder(数据::类)
assign(Data::someProperty,“somevalue”)/(1)
builder.nice将{::someProperty分配给“some value”}//(2)
由于生成器对象是用数据类泛化的,所以在传递属性引用时,我实际上不需要显式地指示数据类。Assign方法已经知道该属性属于哪个类。因此,我不希望每次在assign方法中写入“Data::”(如代码(1)),但我希望将“Data::”作为NiceSign param的接收方属性传递,以便我可以引用“this”对象中的::someProperty

此代码段不起作用,因为我将KClass作为接收者传递,而KClass没有t的属性引用。
那么,有什么方法可以让它工作吗?

如果要将属性引用传递给高阶函数,那么它应该是一个带有
T
作为接收器的函数

在所述情况下,需要:

Pair(调用:T.()->Pair):生成器{
...
}
但要“解包”传递给
nicesign
参数(以便它们可以进一步传递给
assign
函数),您需要
T
的实例,如:

val(prop,value)=调用(kClass.createInstance())

另外,由于
prop
参数类型不匹配,因此无法将结果按原样传递给
assign
方法,因此此方法将需要一些额外的代码返工。

谢谢,这很有效。我也想过。但是有一个问题,您必须在使用构造函数之前手动创建T的实例。对于任意类(具有非null非默认字段),您既不能调用kClass.objectInstance也不能调用kClass.createInstance()。所以,唯一的方法是将引用对象传递给构建器构造函数,但这是一种处理该问题的非常奇怪的方法。
    class Builder<T : Any>(val kClass: KClass<T>) {
        fun <K> assign(prop: KProperty1<T, K>, value: K): Builder<T> = TODO("doing other stuff here")
        fun <K> niceAssign(call: KClass<T>.() -> Pair<KProperty1<T, K>, K>) : Builder<T> {
            val (prop, value) = call(kClass)
            return assign(prop, value)
        }
    }

    val builder = Builder(Data::class)
    builder.assign(Data::someProperty, "some value") // (1)
    builder.niceAssign { ::someProperty to "some value" } // (2)