问题描述
我想创建一个扩展方法来帮助我验证类的所有 lateinit
属性是否已在给定时间点初始化。
到目前为止,我想出了以下几点:
fun Any.assertLateInitPropertiesAreInitialized() {
for (member in this::class.memberProperties) {
if (member.isLateinit) {
try {
member.call(this)
}
catch (e: Throwable) {
if (e.cause is UninitializedPropertyAccessException) {
throw e
}
}
}
}
}
有没有办法用 isInitialized
代替?我不知道如何绑定我的 KProperty1
到 this
以获得 KProperty0
以便我访问它(如果可能的话) .
解决方法
由于 lateinit
属性不能为 null,所以检查 Java 字段是否为 null
应该就足够了。类似的东西:
member.javaField!!.get(this) != null