generics - Kotlin中的Nothing或Any和有什么区别

标签 generics kotlin

我想知道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")
}

如果我改变这个
data class Error(val errorMsg: String) : Result<Nothing>()

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

测试功能发生错误(以下错误消息)
Type mismatch.
Required: Result<T>
Found: Result.Error

可以用Nothing代替通用T吗?

最佳答案

Nothing是一个类,没有实例。
在kotlin类型系统中,Nothing被视为所有其他类的子类。Any完全相反。其他所有类都视为Any的子类。

在函数test中,您将T声明为下限。但是Any无法匹配,因为它比其他任何T都低。请记住:Any是任何其他类的父级。

还可以在有关kotlin类型系统的出色博客文章中抢劫:https://blog.kotlin-academy.com/the-beauty-of-kotlin-typing-system-7a2804fe6cf0

关于generics - Kotlin中的Nothing或Any和有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61671376/

相关文章:

c# - 创建扩展方法以将类型包装为 IEnumerables

c# - 具有相同泛型类类型的泛型参数的类

kotlin - Kotlin 编程语言中的析构函数

android - 使用 CoroutineScope 的边界回调(Android 分页库)

android - 媒体播放器无法在 Android API 28 上播放 mp3

scala - 具有类型成员的 Case 对象的模式匹配

delphi - 为什么 TObjectList<T>.Clear 不释放对象?

c# - 在通用词典中找不到键

android - 如果没有@Provides 注释的方法,则无法提供该类

Android Kotlin + Klaxon - 解析 JSON 根数组