我想知道是否有方法检查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博客上的公告或KEEP提案。
更新:Kotlin 1.2已经发布。您可以在这里找到lateinit增强功能:
检查lateinit变量是否已初始化Lateinit顶级财产和局部变量
如果在一个类中有一个lateinit属性,并且需要检查它是否是从另一个类初始化的
if(foo::file.isInitialized) // this wouldn't work
我找到的解决方法是创建一个函数来检查属性是否已初始化,然后可以从任何其他类调用该函数。
例子:
class Foo() {
private lateinit var myFile: File
fun isFileInitialised() = ::file.isInitialized
}
// in another class
class Bar() {
val foo = Foo()
if(foo.isFileInitialised()) // this should work
}