Почему автор добавляет tasksRepository?: Снова в проект? - PullRequest
1 голос
/ 17 апреля 2020

Код A взят из примеров архитектуры проекта.

Вы можете увидеть его на здесь .

Я думаю, что код return tasksRepository ?: tasksRepository ?: createTasksRepository(context) должен быть return tasksRepository ?: createTasksRepository(context), верно?

Код A

object ServiceLocator {

    private val lock = Any()
    private var database: ToDoDatabase? = null
    @Volatile
    var tasksRepository: TasksRepository? = null
        @VisibleForTesting set

    fun provideTasksRepository(context: Context): TasksRepository {
        synchronized(this) {
            return tasksRepository ?: tasksRepository ?: createTasksRepository(context)
        }
    }
    ...
}

1 Ответ

2 голосов
/ 22 апреля 2020

Это ошибка в реализации алгоритма Двойная проверка блокировки в стиле kotlin, и он должен быть

return tasksRepository ?: synchronized(this) { 
    tasksRepository ?: createTasksRepository(context) 
}

Вот соответствующая проблема Github : https://github.com/android/architecture-samples/issues/674 @ Егор

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