为了简化我的场景,我有一个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 of Some[String]。我如何把参数类型从那里变成一个类型对象?
与链接的答案一样,您可以使用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