如何检查"lateinit"变量是否已在扩展方法中初始化?



我想检查扩展方法中初始化的后期属性。 我想在扩展方法中安全地对 lateinit 属性执行简单的函数调用。

我可以使用this::property.isInitialized.

想要写一些扩展,例如:

fun <T> T?.executeSafety(func: T.() -> (Unit)) { this?.func() }

然后我们可以轻松地在 lateinit 属性上执行简单的方法。请帮忙

在 Kotlin 1.2 及更高版本上,我们可以快速检查 lateinit 属性是否已初始化,是否使用基于反射的 API。

以下是它的工作原理:

lateinit var fullName: String
if (::fullName.isInitialized) {
print("Hi, $fullName")
}

由于此反射 API 仅适用于定义的属性:

  • 在进行检查的同一类中
  • 在外部类中
  • 作为同一文件中的顶级

我们可以通过在目标类上添加一个新方法来检查其他类的 lateinit 属性:

class LateComer {
lateinit var student: Student
fun isStudentInitialised() = ::student.isInitialized
}

相关内容

最新更新