在我自己的代码中,以及在众多邮件列表帖子中,我注意到混乱,因为没有任何东西被推断为其他两种类型的最小上限。
答案可能对你来说很明显*,但我很懒,所以我问你*:
在什么条件下推断这一点最好的结果?
让编译器在这些情况下抛出错误或警告是否有意义,除非被某种注释覆盖?
*多个
答案 0 :(得分:4)
没有什么是一切的子类型,所以它在某种意义上是Any的反对部分,它是一切的超类型。没有什么不能实例化,你永远不会持有Nothing对象。有两种情况(我知道)其中没有什么是实际有用的:
object Nil extends List[Nothing]
,你可以用它来启动你喜欢的任何List。对于你的第二个问题:是的,那将是有用的。我猜有一个编译器开关用于打开这些警告,但我不确定。
答案 1 :(得分:2)
除非这两种类型同时都是Nothing
,否则无法将Nothing
推断为两种类型的最小上限。当你推断出两种类型的最小上限,并且这两种类型没有任何共同点时,你会得到Any
(在大多数情况下,你会得到AnyRef
,因为你会仅在涉及Any
或Int
等值类型时才会获得Long
。)