У меня есть два класса, которые могут выглядеть так:
class MyClass { var myProperty: AnotherClass? } class AnotherClass { }
Через отражение я повторяю свойства MyClass, и когда я нахожу KMutableProperty<*>
который является null, я хочу создать экземпляр этого класса. Прямо сейчас я делаю что-то вроде этого
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 вместо того, чтобы быть чистым Котлином, есть ли способ сделать то, что я хочу? Или это правильно?
Вы можете использовать (property.returnType.classifier as KClass).createInstance()
.