2014-04-02 29 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将有正确的值。现在这在非通用输入崩溃,但我可以解决这个问题。

相关问题