Котлин: Как проверить, что переменная со свойством lateinit инициализирована или нет - PullRequest
0 голосов
/ 05 октября 2018

У меня есть переменная, которая объявлена ​​как

private lateinit var apiDisposable: Disposable

, а затем в методе onPause() я делаю

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

Но я получаю это

kotlin.UninitializedPropertyAccessException: свойство lateinit apiDisposable не было инициализировано

Может кто-нибудь сказать мне, как я могу проверить, инициализирована ли эта переменная или нет?Есть ли такой метод, как isInitialised()

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Объявите ваше свойство как простое свойство типа Nullable:

private var apiDisposable: Disposable? = null

Вызовите метод, используя безопасную запись вызова:

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

lateinit зарезервировано для переменных, которыегарантированно инициализируются, если это не ваш случай - не используйте его.

0 голосов
/ 05 октября 2018
if(::apiDisposable.isInitialized)

решит вашу проблему.

Как правило,

::<lateinit variable name>.isInitialized используется для проверки инициализации.

...