我有两个可能看起来像这样的课程
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,是否有正确的方式来做我想要的?或者这是正确的方法吗?
答案 0 :(得分:3)
您可以改为使用(property.returnType.classifier as KClass).createInstance()
。