4
了
的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
。所以reflect.runtime.universe.Type
是不是真的type
?如何使用typeTag
信息將值轉換爲某種類型?
你已經回答了我的問題,而是一個問題導致另一個,這導致了另一個。你能幫助解決這一之一:http://stackoverflow.com/questions/29400439/cast-a-variable-to-runtime-type-from-existential-typed-typecast-in-scala – Causality 2015-04-01 20:44:45
這大概只能是有點用,因爲它依賴於知道「A」是用於「TypeTag」的。 – 2015-04-01 22:42:49