类型标签/反射-如果我有一个类型对象,我可以得到它的参数类型



为了简化我的场景,我有一个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

相关内容

  • 没有找到相关文章

最新更新