Говорят, что scala.Nothing
и scala.Null
являются нижними классами, и они расширяют все классы AnyRef
. Рассмотрим ниже фрагмент кодаScala: Null and Nothing
class Test() {}
val test:Test = null
Так что для заявления на удалось либо Null
должен расширить пользовательский класс Test
(т.е. тест супер тип Null) или тип системы должен делать исключения из не бросали ошибки несоответствия типов для scala.Null
, Как scala гарантирует, что эти два класса всегда расширяют любые другие классы потомков AnyRef в scala?
'Null' и' Nothing' является явно специальным обсаженным в AIUI компилятора - это то, что вы спрашиваете? – lmm
yes @Imm любая идея, как это работает? делает ли компилятор только если LHS является потомком AnyRef и не следует обычной проверке типа? –
Что-то вроде этого: https://github.com/scala/scala/blob/3c7b1e3d953703582aae81506f8b27732a603bfe/src/compiler/scala/tools/nsc/backend/jvm/BTypes.scala#L320-L326 – dmitry