Синглтон с проверкой isInitialized - PullRequest
0 голосов
/ 29 ноября 2018

Я занимаюсь разработкой синглтон-класса в Kotlin, но я хочу проверить, инициализирован ли "instance" lateinit var, вместо этого проверить, является ли значение NULL, но это не работает.Я думаю, лучше инициализировать var как lateinit, а не как null var.

companion object {
    private lateinit var instance: GameDAO

    fun getInstance(): GameDAO {
        if (!::instance.isInitialized) {
            synchronized(this) {
                instance = GameDAO()
            }
        }
        return instance
    }
}

Компилятор покажет мне следующую ошибку: введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018
object GameDao {
    fun hereGoesYourFunctions()
}

вызов здесь GoesYourFunctions инициализирует класс GameDao.

0 голосов
/ 29 ноября 2018

Вы можете попробовать еще лучший подход:

class SingletonClass private constructor() {

init {
    println("This ($this) is a singleton")
}

private object Holder {
    val INSTANCE = SingletonClass()
}

companion object {
    val instance: SingletonClass by lazy {
        Holder.INSTANCE
    }
}
0 голосов
/ 29 ноября 2018

Я думаю, что вы пытаетесь достичь, лучше всего сделать с помощью функции lazy, чтобы лениво инициализировать значение при первом запросе.Подробнее см. здесь .

например,

companion object {
    val instance: GameDAO by lazy { GameDAO() }
}

Вам не нужна отдельная функция getInstance: вы можете просто получить доступ к свойству instance напрямую,и он будет инициализирован при первом запросе (потокобезопасным способом).

Это предполагает, что вы хотите, чтобы объект был инициализирован только при первом запросе (то есть, с ленивой инициализацией).Если вы хотите, чтобы он всегда создавался, вы можете просто создать его и немедленно назначить его переменной / свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...