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

In Scala how can I reflect on a typedef (eg. type Data = Map[String,Any])?

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

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

我是这样想的class:

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

我怎么知道像上面的 Data 这样的类型实际上是一个 typedef 我怎么知道它解析成什么?('f' 中的类型上面的剪辑是 universe.Symbol)

我误以为它是编译器糖果,编译后它会解析为它定义的类型,但显然不是!

您可以使用 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]