2013-03-07 115 views
1

现在从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的一个符号

回答

2

可能会有一个较短的方式,但这个工程。

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

这很完美! – 2013-03-07 12:15:39