Scala反射中的Dealiasing类型

时间:2015-03-28 16:49:03

标签: scala reflection scala-reflect

如何在Type的情况下解析别名?即。

import reflect.runtime.universe._

type Alias[A] = Option[Option[A]]
val tpe = typeOf[Alias[_]] 
val ExistentialType(quantified, underlying) = tpe

如何从Option[Option[_$1]](或underlying)获取tpe?我知道typeSymbol确实解决了别名,但它似乎丢失了过程中的参数:

scala> val tT = typeOf[Alias[_]].typeSymbol
tT: reflect.runtime.universe.Symbol = class Option

scala> tT.asType.toType
res3: reflect.runtime.universe.Type = Option[A]

scala> tT.asType.typeParams
res4: List[reflect.runtime.universe.Symbol] = List(type A)

1 个答案:

答案 0 :(得分:6)

该方法在2.10中被称为normalize(已弃用且在2.11中添加了dealias)。我不知道在第一次搜索时我是如何错过的。