The asInstanceOf[T]
适用于类型的“简单”情况T
由代码明确给出:例如
scala> val x: Any = 5
x: Any = 5
scala> x.asInstanceOf[Int]
res50: Int = 5
scala> val m1: Any = Map[String, Int]("a"->1, "b"->2)
m1: Any = Map(a -> 1, b -> 2)
scala> m.asInstanceOf[Map[String, Int]]
res51: Map[String,Int] = Map(a -> 1, 2 -> b)
scala> val m2: Any = Map[Any,Any]("a"->1, 2->"b")
m2: Any = Map(a -> 1, 2 -> b)
scala> m.asInstanceOf[Map[Any, Any]]
res52: Map[Any,Any] = Map(a -> 1, 2 -> b)
但是当类型T
在运行时通过检索TypeTags
, asInstanceOf[T]
不起作用。例如:
scala> val intT = typeTag[Int].tpe
intT: reflect.runtime.universe.Type = Int
scala> x.asInstanceOf[intT]
<console>:12: error: not found: type intT
x.asInstanceOf[intT]
该错误清楚地表明intT
不是一个type
. So reflect.runtime.universe.Type
不是真实的type
?如何使用将值转换为特定类型typeTag
信息?