当我使用时KProperty1
,我可以检查该属性是否已初始化吗?现在我只是尝试将其称为属性并检查是否存在异常:
inline fun <reified T : Any> T.stringify() =
T::class
.memberProperties
.filter { it.visibility == KVisibility.PUBLIC }
.filter {
try {
it.get(this)
true
} catch (_: Throwable) {
// lateinit property may be not initialized
// did not find how to check it
false
}
}
.joinToString(", ") { "${it.name} = \"${it.get(this)}\"" }
.let { T::class.simpleName + "($it)" }
未初始化的支持字段
lateinit var
将具有值null
,因此您可以检查:第二个
filter
看起来是这样的:由于
lateinit
s 始终有一个支持字段,并且不能是可空类型,所以javaField
将始终为非空,并且get
返回 null 必须意味着该属性尚未初始化,而不是该属性实际上被初始化为一个null
值。