2014-04-02 31 views
0

這與Finding type parameters via reflection in Scala 2.10?有關,但給出的解決方案不適合我。我想要做的是遍歷一個類的成員,其中一些是列表等,例如val myField:List [String]。我希望能夠以某種方式獲得「String」,而不必破解typeSignature字段的.toString值。如何通過反射在Scala中運行時發現的成員類型的*聲明的*泛型參數?

我試圖

typeOf[member.typeSignature].asInstanceOf[TypeRefApi].args 

,但顯然通過typeSignature返回scala.runtime.Type實現從使用typeof(如上面的問題中使用)返回一個不同的,因爲我得到以下異常:

java.lang.ClassCastException: scala.reflect.internal.Types$NullaryMethodType cannot be cast to scala.reflect.api.Types$TypeRefApi 

我也試過:

val TypeRef(_, _, tpe :: Nil) = member.typeSignature 

但隨後我得到這個例外:

scala.MatchError: => scala.Option[String] (of class scala.reflect.internal.Types$NullaryMethodType) 

有沒有人知道如何做到這一點?

回答

0

更新:我想出了一個辦法做到這一點:

val NullaryMethodType(tpe) = member.typeSignature 
val TypeRef(_, _, tpe2 :: Nil) = tpe 

然後TPE2將有正確的值。現在這在非通用輸入崩潰,但我可以解決這個問題。

相關問題