在我自己的代码和大量邮件列表中,我注意到由于 Nothing 被推断为其他两种类型的最小上限而引起的混乱。
答案对你来说可能很明显*,但我很懒,所以我问你*:
在什么条件下以这种方式推断无是最理想的结果?
在这些情况下让编译器抛出错误或警告是否有意义,除非被某种注释覆盖?
* 复数
在我自己的代码和大量邮件列表中,我注意到由于 Nothing 被推断为其他两种类型的最小上限而引起的混乱。
答案对你来说可能很明显*,但我很懒,所以我问你*:
在什么条件下以这种方式推断无是最理想的结果?
在这些情况下让编译器抛出错误或警告是否有意义,除非被某种注释覆盖?
* 复数
Nothing 是一切的子类型,因此在某种意义上它是 Any 的对应部分,Any 是一切的超类型。Nothing 不能被实例化,你永远不会持有 Nothing 对象。有两种情况(我知道)没有实际有用:
object Nil extends List[Nothing]
,并且您可以使用它来启动任何您喜欢的 List。对于你的第二个问题:是的,那会很有用。我猜已经有一个编译器开关可以打开这些警告,但我不确定。
不可能推断Nothing
为两种类型的最小上限,除非这两种类型也都是Nothing
. 当您推断出两种类型的最小上限,并且这两种类型没有任何共同点时,您会得到Any
(在大多数这种情况下,您会得到AnyRef
,因为您只会在涉及or之Any
类的值类型时得到.)Int
Long