1

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

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

想写一些扩展,如:

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

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

4

1 回答 1

-1

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

以下是它的工作原理:

lateinit var fullName: String

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

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

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

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

class LateComer {
    lateinit var student: Student

    fun isStudentInitialised() = ::student.isInitialized
}
于 2020-05-25T08:51:57.297 回答