现在从Finding type parameters via reflection in Scala 2.10?,我可以看到如何获取类型参数,但是我想从子类参数类型中获取它们。例如,我有
trait ICommand
trait IHandle[T <: ICommand] {
def handle(t:T):Unit
}
case class MyCommand(i:Int) extends ICommand
trait MyHandler extends IHandle[MyCommand]
所以我想找到MyHandler的ICommand参数。到目前为止,我可以得到
val t = typeOf[MyHandler]
val s = tt.typeSymbol.typeSignature
s.toString会给IHandle [MyCommand],但是我想把MyCommand作为符号拉出来
答案 0 :(得分:2)
可能有一个较短的方式,但这有效。
scala> typeOf[MyHandler].baseType(typeOf[IHandle[_]].typeSymbol) match { case TypeRef(_, _, List(tpe)) => tpe.typeSymbol }
res8: reflect.runtime.universe.Symbol = class MyCommand