我如何在 Kotlin 中对 属性 的 属性 进行反思?
How do I get a reflection on a property's property in Kotlin?
假设我们有一个 class 和一个 属性 子类。
class TestClass(val property: SubClass)
子类有自己的属性
class SubClass(val subProperty: Any?)
当我只能访问 class 本身时,我知道我可以通过
轻松获得对 属性 的反射
val reflection = TestClass::property
但是,如何通过反射访问子属性?以下不起作用:
val subReflection = TestClass::property::subProperty
如果有任何见解,我将不胜感激!谢谢!
我找到了答案(感谢@BernhardKern):
TestClass::property.toJoin().where(SubClass::subProperty).equal(whatINeed)
TestClass::property.returnType.jvmErasure
会给你SubClass::class
,所以你可以做类似
的事情
val subReflection = TestClass::property.returnType.jvmErasure.declaredMemberProperties.find { it.name == "subProperty" }!!
(!!
为了简化代码,您可能需要在实践中实际检查 null。)
假设我们有一个 class 和一个 属性 子类。
class TestClass(val property: SubClass)
子类有自己的属性
class SubClass(val subProperty: Any?)
当我只能访问 class 本身时,我知道我可以通过
轻松获得对 属性 的反射val reflection = TestClass::property
但是,如何通过反射访问子属性?以下不起作用:
val subReflection = TestClass::property::subProperty
如果有任何见解,我将不胜感激!谢谢!
我找到了答案(感谢@BernhardKern):
TestClass::property.toJoin().where(SubClass::subProperty).equal(whatINeed)
TestClass::property.returnType.jvmErasure
会给你SubClass::class
,所以你可以做类似
val subReflection = TestClass::property.returnType.jvmErasure.declaredMemberProperties.find { it.name == "subProperty" }!!
(!!
为了简化代码,您可能需要在实践中实际检查 null。)