从KType

时间:2017-03-12 14:55:31

标签: reflection jvm kotlin

我有两个可能看起来像这样的课程

class MyClass {
    var myProperty: AnotherClass?
}

class AnotherClass {

}

通过反射我迭代MyClass的属性,当我找到一个为空的KMutableProperty<*>时,我想创建该类的实例。现在我正在做这样的事情

val instance = MyClass()
val property = MyClass::myProperty
var subInstance = it.getter.call(instance)
if (subInstance == null) {
    it.setter.call(instance, property.returnType.jvmErasure.createInstance())
}

但这似乎是一个可怕的黑客,需要知道内部并使用Java魔术而不是纯粹的Kotlin,是否有正确的方式来做我想要的?或者这是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

您可以改为使用(property.returnType.classifier as KClass).createInstance()