2013-03-07 105 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