В чем разница между Nothing или Any in Kotlin - PullRequest
1 голос
/ 08 мая 2020

Я хочу знать разницу между Nothing и Any

У меня запечатанный класс

sealed class Result<out R>() {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val errorMsg: String) : Result<Nothing>()
}

И это использование класса Result

fun <T>test(data: T) : Result2<T> {
    return Result2.Error("error")
}

If Я меняю это

data class Error(val errorMsg: String) : Result<Nothing>()

На это

data class Error(val errorMsg: String) : Result<Any>()

В тестовой функции возникает ошибка (сообщение об ошибке ниже)

Type mismatch.
Required: Result<T>
Found: Result.Error

Можно ввести Ничего не заменить generi c Т?

1 Ответ

1 голос
/ 08 мая 2020

Nothing - это класс, у которого нет экземпляров. В системе типов kotlin Nothing рассматривается как подкласс всех остальных классов. Any - полная противоположность. Каждый другой класс считается подклассом Any.

В вашей функции test вы объявили T как нижнюю границу. Но Any не может совпадать, потому что он ниже любого другого T. Помните: Any является родительским для любого другого класса.

Также возьмите добычу в отличном сообщении в блоге о системе типов kotlin: https://blog.kotlin-academy.com/the-beauty-of-kotlin-typing-system-7a2804fe6cf0

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