TypeTags / Reflection - 如果我有一个Type对象,我可以得到它的参数Type吗?

时间:2013-06-20 16:43:17

标签: scala reflection scala-2.10

为简化我的方案, 我有一个Type对象是Some [String]或Some [Int]或None。 我能够获取Type对象并以某种方式将参数Type输入另一个对象吗?

例如

scala>  import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> val tt = typeTag[Some[String]]
tt: reflect.runtime.universe.TypeTag[Some[String]] = TypeTag[scala.Some[String]]

scala> val tpe = tt.tpe
tpe: reflect.runtime.universe.Type = scala.Some[String]

所以有你的Type [String]。 如何将参数类型输出到Type对象中?

1 个答案:

答案 0 :(得分:1)

the linked answer一样,您可以使用TypeRef提取器:

import reflect.runtime.universe._

val tpe = typeOf[Some[String]] // same as typeTag[Some[String]].tpe

// extract type parameters
val TypeRef(_,_, tps) = tpe
// tps has type List[Type]

val innerType = tps.head // <-- here is your type
// innerType: reflect.runtime.universe.Type = String