1

Scala2.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 に答える