我想知道是否有一种方法可以检查lateinit变量是否已初始化。例如:

class Foo() {

    private lateinit var myFile: File

    fun bar(path: String?) {
        path?.let { myFile = File(it) }
    }

    fun bar2() {
        myFile.whateverMethod()
        // May crash since I don't know whether myFile has been initialized
    }
}

最佳答案

Kotlin 1.2中的lateinit进行了改进,可以直接检查lateinit变量的初始化状态:

lateinit var file: File

if (this::file.isInitialized) { ... }

请参见JetBrains blogKEEP proposal上的声明。

更新: Kotlin 1.2已发布。您可以在这里找到lateinit增强功能:
  • Checking whether a lateinit var is initialized
  • Lateinit top-level properties and local variables
  • 10-08 18:21