W poniższym kodzie:Dlaczego Scala promuje listę [Any] na liście [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]))
tutaj jest wyjście (Scala 2.8.1):
0: java.lang.Long
1: java.lang.Long
2: java.lang.Long
Dlaczego numery awansować java.lang.Long? Jak mogę to zrobić, aby zachować swoje typy AnyVal
lub uzyskać "pudełkowy" odpowiednik typu AnyRef
?