Ответ 1
В Scala Null
- тип, который имеет одно значение Null
. Поскольку Null
- значение, и каждое значение в Scala является объектом, вы можете вызывать методы на нем.
Так как Int "не соответствует" AnyRef, я не уверен, почему он не бросает исключение NullPointerException в соответствии с Scala Ссылка в разделе 6.3:
asInstanceOf [T] возвращает сам объект "null", если T соответствует scala.AnyRef и выбрасывает исключение NullPointerException в противном случае
И не имеет значения null.asInstanceOf[Double]
, null.asInstanceOf[Boolean]
, null.asInstanceOf[Char]
.
PS: Моя библиотека scala имеет версию 2.9.0.1 и ОС Windows XP
В Scala Null
- тип, который имеет одно значение Null
. Поскольку Null
- значение, и каждое значение в Scala является объектом, вы можете вызывать методы на нем.
Действительно, это немного удивительно, учитывая раздел 6.3 описания языка как указано в билете huynhjl.
Поведение (null.asInstanceOf[Int]
дает вам 0
), с другой стороны, несколько соответствует следующему наблюдению:
new Array[AnyRef](3) // -> Array(null, null, null)
new Array[Int ](3) // -> Array(0, 0, 0)
И как таковой может быть полезен в родовом классе, если вы хотите иметь "значение" для типа X
, даже если у вас нет определенного значения. Как и во втором наблюдении:
class X[A] {
var value: A = _
}
new X[Int].value // -> 0 (even if X is not specialized in A, hmmm....)