3.10. Typ Null
Wyżej od typu Nothing w hierarchii typów znajduje się typ Null. Typ Null jest podtypem AnyRef i wszystkich innych typów będących podtypami AnyRef. Istnieje jedna możliwa wartość tego typu i jest nią null, która jest referencją do specjalnego obiektu. Obiekt null w następujący sposób implementuje metody klasy AnyRef.
Metody eq i == wywołane na obiekcie null zwracają wartość true, jeśli ich argumentem jest również null oraz zwracają false w przeciwnym przypadku. Metody ne i != zachowują się odwrotnie.
scala> val n: AnyRef = null n: AnyRef = null scala> n == null res0: Boolean = true scala> n == 1 res1: Boolean = false scala> n eq null res2: Boolean = true scala> n ne null res3: Boolean = false scala> n != null res4: Boolean = false scala> n != 1 res5: Boolean = true
Metoda isInstanceOf[T] wywołana na obiekcie null zwraca wartość false.
scala> null.isInstanceOf[Int] res6: Boolean = false scala> null.isInstanceOf[String] res7: Boolean = false scala> null.isInstanceOf[Any] res8: Boolean = false
Metoda asInstanceOf[T] powinna (według specyfikacji) zwracać null, jeśli typem T jest AnyRef lub jego podtyp, natomiast wyrzucać wyjątek NullPointerException w przeciwnym przypadku.
scala> null.asInstanceOf[Null] res9: Null = null scala> null.asInstanceOf[AnyRef] res10: AnyRef = null scala> null.asInstanceOf[String] res11: String = null scala> null.asInstanceOf[Any] res12: Any = null scala> null.asInstanceOf[Int]res13: Int = 0 scala> null.asInstanceOf[Nothing] java.lang.NullPointerException at .$print$lzycompute(<console>:10) at .$print(<console>:6) …
![]() | Niestety, metoda asInstanceOf[T] nie zawsze działa w prawidłowy
sposób. Na przykład wynikiem wywołania tej metody w wierszu |
Odwołania do innych składowych obiektu null skutkują wyjątkiem NullPointerException.
scala> null.equals(1) java.lang.NullPointerException ... 33 elided scala> null.toString java.lang.NullPointerException ... 33 elided scala> null.hashCode java.lang.NullPointerException ... 33 elided
![]() | Specyfikacja języka Scala opisuje obiekt null w punkcie 6.3. |
res13: Int = 0
scala> null.asInstanceOf[Nothing]
java.lang.NullPointerException
at .$print$lzycompute(<console>:10)
at .$print(<console>:6)
…


