为什么不null.asInstanceOf [Int]抛出NullPointerException?

时间:2011-11-27 13:31:52

标签: scala nullpointerexception

由于Int“不符合”AnyRef,我不知道为什么它不会在第6.3节中根据Scala Reference抛出NullPointerException:

  

如果T符合,则asInstanceOf [T]返回“null”对象本身   scala.AnyRef,否则抛出NullPointerException

null.asInstanceOf[Double]null.asInstanceOf[Boolean]null.asInstanceOf[Char]都没有。

PS:我的scala库是版本2.9.0.1和OS Windows XP

2 个答案:

答案 0 :(得分:5)

在Scala中Null是一种类型,它具有单个值null。由于null是一个值,Scala中的每个值都是一个对象,因此可以在其上调用方法。

答案 1 :(得分:-1)

考虑到huynhjl的票证中language spec的第6.3节,确实有点令人惊讶。

另一方面,行为(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....)