Kotlin:如何检查具有lateinit属性的变量是否已初始化

Kis*_*nki 5 android kotlin rx-java retrofit reactivex

我有一个声明为的变量

private lateinit var apiDisposable: Disposable
Run Code Online (Sandbox Code Playgroud)

然后在onPause()方法中,我正在做

override fun onPause() {
    super.onPause()
    if (!apiDisposable.isDisposed)
        apiDisposable.dispose()
}
Run Code Online (Sandbox Code Playgroud)

但我明白了

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

任何人都可以告诉我如何检查此变量是否已初始化?有没有像这样的方法isInitialised()

任何帮助,将不胜感激

use*_*816 9

if(::apiDisposable.isInitialized)
Run Code Online (Sandbox Code Playgroud)

会解决你的问题.

一般来说,

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

  • 伴生对象中的这个变量是什么? (2认同)

Ego*_*gor 8

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

private var apiDisposable: Disposable? = null
Run Code Online (Sandbox Code Playgroud)

使用安全呼叫表示法调用该方法:

override fun onPause() {
    super.onPause()
    apiDisposable?.dispose()
}
Run Code Online (Sandbox Code Playgroud)

lateinit 保留用于保证初始化的变量,如果不是这种情况 - 请勿使用它.