asInstanceOf[T] works for the βsimpleβ case when the type T is explicitly set by code: for example,
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)
But when type T is retrieved at run time through TypeTags , asInstanceOf[T] does not work. For instance:
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]
The error says that it is clear that intT not type . So, reflect.runtime.universe.Type not a real type ? How to pass a value to a specific type using typeTag information?
source share