就像在这个例子中:
sealed class Option<T>
object None : Option<Nothing>() // <-- like this
class Some<T> : Option<T>()
Run Code Online (Sandbox Code Playgroud)
或者,如果这不是一个好习惯,我应该在这里使用什么呢?
对此有任何官方回应/文章吗?或者有没有论证这是一个好习惯?
我知道这Nothing被设计为用作永不返回任何值的函数的返回值的类型,所以我不确定将它用作泛型参数是否是有效用途.
我知道有一篇文章说你可以做到,但我不确定我是否可以相信它.
koptional的作者也使用它,但我不知道我是否也可以相信.
此外,看起来在Scala Option中实现的类似,None类型Option[Nothing]和Scala Nothing类似于Kotlin的Nothing.
我同意@ zsmb13的评论.使用Nothing泛型类型层次是完全合法的,甚至给出了其它选项的好处:
首先,Nothing作为任何其他类型的子类型嵌入在Kotlin类型系统中,因此它与泛型方差一起使用.例如,Option<Nothing>可以传递到Option<out Foo>预期的位置.
其次,Nothing当静态成员类型调用时,编译器将执行控制流检查并检测无法访问的代码.
另请参阅:Kotlin类型层次结构的旋风之旅
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |