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

时间:2013-03-07 10:26:13

标签: scala reflection type-parameter

现在从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作为符号拉出来

1 个答案:

答案 0 :(得分:2)

可能有一个较短的方式,但这有效。

scala> typeOf[MyHandler].baseType(typeOf[IHandle[_]].typeSymbol) match { case TypeRef(_, _, List(tpe)) => tpe.typeSymbol }
res8: reflect.runtime.universe.Symbol = class MyCommand
相关问题