首页 > 解决方案 > 如何获取 KmutableProperty i Kotlin 的容器?

问题描述

val prop:KMutableProperty1<<A,Any>>在 A 类中有一个字段 x,我可以通过它获取字段名称,prop.name但是如何获取它的容器类名称 (A)?

标签: kotlinkotlin-reflect

解决方案


我认为这将取决于您如何获得此属性参考,但如果您这样做:

class A(var x: Int = 0)

val prop: KMutableProperty1<A, Any> = A::x as KMutableProperty1<A, Any>

然后,这一系列尝试的强制转换可以为您提供一个KClass实例:

val kclass = (prop as? MutablePropertyReference1)?.owner as? KClass<*>
println(kclass) // class A

同样,这几乎不会在所有情况下都有效,因为这些属性实际上返回的接口还有其他实现,因此转换可能会失败


推荐阅读