2016-05-21 13 views
2
trait F[S]{ 
    def evaluate(): S 
} 

よりtypeOf [F [Double]]から "evaluate"の戻り値の型がDoubleであることがわかりますか?スカラーリフレクションで型パラメータを返すメソッドの型を調べる方法は?

typeOf[F[Double]] 
.decls 
.filter(_.name.toString=="evaluate") 
.head 
.asMethod 
.returnType 
.dealias 

==> S

ダブルが消去されていないリターンを評価する型情報 - それだけで検索し、型パラメータと一致するために、そのハードのように思える:

私のクラスは、多くの種類のパラメータを有することができるので、私はSが最初の型パラメータであることを確認することはできませんが、型並みのタイプということ
typeOf[F[Double]].typeArgs 

==>一覧(ダブル)

その可能ametersは知られているようです。

答えて

3

asSeenFromを使用できます。

val tpe = typeOf[F[Double]] 

tpe.decls 
    .filter(_.name.toString == "evaluate") 
    .head 
    .asMethod 
    .returnType 
    .asSeenFrom(tpe, tpe.typeSymbol) 
関連する問題