[英]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.