在Scala中,我如何反映typedef(例如,类型Data = Map [String,Any])?

时间:2015-09-23 17:46:10

标签: scala reflection

我正在写一些反射代码。我有一个这样的课:

case class Foo(
   info : Map[String,Any]
)

我这样反思这个课:

ctor.typeSignature.paramLists.head.map( f => {
   println("F: "+f.typeSignature)
})

如上所述,我看到了我对会员信息类型的期望:Map [String,scala.Any]

但是......如果我这样做:

type Data = Map[String,Any]
case class Foo(
   info : Data
)

现在我看到信息的类型为:co.blocke.scalajack.test.v4.Data

如何判断上面的数据类型是否实际上是一个typedef,我怎么能看到它解析的内容?(上面剪辑中'f'的类型是universe.Symbol)

我错误地认为它是编译器糖果并且在编译之后它将解析为其定义的类型,但显然不是!

1 个答案:

答案 0 :(得分:1)

您可以使用dealias

type Data = Map[String,Any]
case class Foo(info: Data)

原谅缺乏安全措施,但要切入追逐:

typeOf[Foo].typeSymbol
    .asClass
    .primaryConstructor
    .typeSignature
    .paramLists
    .head
    .head
    .typeSignature
    .dealias

res2: reflect.runtime.universe.Type = scala.collection.immutable.Map[String,scala.Any]