Вы можете безопасно вызывать .asInstanceOf[AnyRef]
по любому значению Scala, которое будет содержать примитивы:
scala> val as = Seq("a", 1, 1.5, (), false)
as: Seq[Any] = List(, 1, 1.5, (), false)
scala> as map (_.asInstanceOf[AnyRef])
res4: Seq[AnyRef] = List(a, 1, 1.5, (), false)
Оттуда вы можете позвонить getClass
.
scala> as map (_.asInstanceOf[AnyRef].getClass)
res5: Seq[java.lang.Class[_]] = List(class java.lang.String, class java.lang.Int
eger, class java.lang.Double, class scala.runtime.BoxedUnit, class java.lang.Boo
lean)
Протестировано с 2.8.0.RC6, я не знаю, это работало в 2.7.7.
Определенно новым в 2.8 являются сопутствующие объекты для классов, производных от AnyVal. Они содержат удобные box
и unbox
методы:
scala> Int.box(1)
res6: java.lang.Integer = 1
scala> Int.unbox(res6)
res7: Int = 1