检查类的所有 lateinit 成员是否都已初始化

时间:2021-03-14 20:20:28

标签: kotlin jvm kotlin-lateinit

我想创建一个扩展方法来帮助我验证类的所有 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 代替?我不知道如何绑定我的 KProperty1this 以获得 KProperty0 以便我访问它(如果可能的话) .

1 个答案:

答案 0 :(得分:2)

由于 lateinit 属性不能为 null,所以检查 Java 字段是否为 null 应该就足够了。类似的东西:

member.javaField!!.get(this) != null
相关问题