Тип scala Nothing
представляет (как я понимаю) нижнюю часть иерархии типов, также обозначаемую символом ⊥. То есть Nothing
является подтипом любого заданного типа. Требование для типа 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)
}