Kotlin:如何使用lateinit属性检查变量是否已初始化

时间:2018-10-05 10:49:05

标签: android kotlin retrofit rx-java reactivex

我有一个声明为

的变量
private lateinit var apiDisposable: Disposable

然后使用onPause()方法,

override fun onPause() {
    super.onPause()
    if (!apiDisposable.isDisposed)
        apiDisposable.dispose()
}

但是我明白了

  

kotlin.UninitializedPropertyAccessException:lateinit属性   apiDisposable尚未初始化

谁能告诉我如何检查此变量是否已初始化?是否有类似isInitialised()

的方法

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:9)

if(::apiDisposable.isInitialized)

将解决您的问题。

通常

::<lateinit variable name>.isInitialized用于检查它是否已初始化。

答案 1 :(得分:6)

将您的属性声明为可空类型的简单属性:

private var apiDisposable: Disposable? = null

使用安全调用符号调用方法:

override fun onPause() {
    super.onPause()
    apiDisposable?.dispose()
}

lateinit保留给保证可以初始化的变量,如果您不是这种情况,请不要使用它。