Что делает запечатанный класс и объяснение класса ниже - PullRequest
0 голосов
/ 15 февраля 2020

Я какое-то время занимался android разработкой, но я всегда с нетерпением ждал, чтобы узнать что-то новое.

Я наткнулся на код ниже на codelab для модульного тестирования viewmodel. Мне очень нравится, что база кода упорядочена, но я не понимаю некоторые коды, подобные приведенному ниже.

Мне понравятся некоторые рекомендации по созданию класса с типом карты, как показано ниже.

В основном Я хотел бы знать, как Result <*> все еще относится к Result и почему класс просто называется / реализован как Success (it).

Буду признателен за доброе руководство.

sealed class Result<out R> {


    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>()

    override fun toString(): String {
        return when (this) {
            is Success<*> -> "Success[data=$data]"
            is Error -> "Error[exception=$exception]"
            Loading -> "Loading"
        }
    }
}

/**
 * `true` if [Result] is of type [Success] & holds non-null [Success.data].
 */
val Result<*>.succeeded
    get() = this is Success && data != null

//implementation
 override fun observeTask(taskId: String): LiveData<Result<Task>> {
        return tasksDao.observeTaskById(taskId).map {
            Success(it)
        }
    }

1 Ответ

0 голосов
/ 15 февраля 2020

Result<*>.succeeded является свойством расширения закрытого класса Result.

Проверьте руководство по расширениям в Kotlin:

https://kotlinlang.org/docs/reference/extensions.html

...