1

我想创建一个扩展方法,帮助我验证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代替使用?我不知道如何绑定myKProperty1this获得 aKProperty0所以我访问它(如果可能的话)。

4

1 回答 1

2

由于lateinit属性不能为空,因此检查 Java 字段是否为null. 就像是:

member.javaField!!.get(this) != null
于 2021-03-14T23:12:53.820 回答