在下面的代碼:爲什麼Scala將列表[Any]列入[Long]?
def test(list: List[Any]): Unit = {
list.foreach {
v =>
v match {
case r: AnyRef => println(r + ": " + r.getClass.getName)
case d: Double => println(d + ": Double")
case f: Float=> println(f + ": Float")
case b: Byte => println(b + ": Byte")
case c: Char => println(c + ": Char")
case s: Short => println(s + ": Short")
case i: Int => println(i + ": Int")
case l: Long=> println(l + ": Long")
case b: Boolean => println(b + ": Boolean")
case _ => throw new IllegalArgumentException("Unknown type: " + v)
}
}
}
test(List(0L, 1.asInstanceOf[Int], 2.asInstanceOf[Short]))
這裏是輸出(斯卡拉2.8.1):
0: java.lang.Long
1: java.lang.Long
2: java.lang.Long
爲什麼數字被晉升爲java.lang.Long中?我該如何做到這一點,以便他們保持其AnyVal
類型或「盒裝」到相應的AnyRef
類型?