scala 类型Nothing
代表(据我所知)类型层次结构的底部,也用符号 ⊥ 表示。也就是说,Nothing
是任何给定类型的子类型。James Iry为我们这些没有类型理论理论背景的人很好地解释了Nothing
类型的要求!
所以我的问题是,如果Nothing
是每种类型的子类型,为什么我不能调用任何类型的方法Nothing
?显然,我不能实例化 Nothing 但为什么下面的代码不编译?
var n: Nothing = _
def main(args: Array[String]) {
println(n.length) //compile error: value length is not a member of Nothing
}
当然,这Nothing
是一个子类型String
应该可以吗?请注意,以下编译得很好!
var n: Nothing = _
def foo(s: String) : Int = s.length
def main(args: Array[String]) {
println(foo(n))
}
一样:
def main(args: Array[String]) {
println(n.asInstanceOf[String].length)
}