我想知道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/