1

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

4

1 回答 1

2

可能有更短的方法,但这有效。

scala> typeOf[MyHandler].baseType(typeOf[IHandle[_]].typeSymbol) match { case TypeRef(_, _, List(tpe)) => tpe.typeSymbol }
res8: reflect.runtime.universe.Symbol = class MyCommand
于 2013-03-07T12:12:44.307 回答