现在从在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的iccommand参数。目前我能找到
val t = typeOf[MyHandler]
val s = tt.typeSymbol.typeSignature
Where s.toString将给出IHandle[MyCommand],但是我想拉出MyCommand作为一个符号
可能有更短的方法,但这是可行的。
scala> typeOf[MyHandler].baseType(typeOf[IHandle[_]].typeSymbol) match { case TypeRef(_, _, List(tpe)) => tpe.typeSymbol }
res8: reflect.runtime.universe.Symbol = class MyCommand