Scala反射,查找子类型的类型参数



现在从在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

相关内容

  • 没有找到相关文章

最新更新