簡體   English   中英

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

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

我正在寫一些反射代碼。 我有這樣的課:

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

我怎樣才能知道上面的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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM