почему null.asInstanceOf [Int] не генерирует исключение NullPointerException? - PullRequest
14 голосов
/ 27 ноября 2011

Поскольку Int "не соответствует" AnyRef, я не уверен, почему он не генерирует исключение NullPointerException в соответствии с Scala Reference в разделе 6.3:

asInstanceOf [T] возвращает сам «нулевой» объект, если T соответствует scala.AnyRef и создает исключение NullPointerException в противном случае

И ни один не делает null.asInstanceOf[Double], null.asInstanceOf[Boolean], null.asInstanceOf[Char].

PS: моя библиотека scala имеет версию 2.9.0.1 и ОС Windows XP

Ответы [ 2 ]

5 голосов
/ 27 ноября 2011

В Scala Null - это тип, который имеет одно значение null. Поскольку null является значением, а каждое значение в Scala является объектом, вы можете вызывать методы для него.

0 голосов
/ 27 ноября 2011

Действительно, это немного удивительно, учитывая раздел 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....)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...