如何查找使用scala反射返回类型参数的方法的类型?

时间:2016-05-21 02:05:21

标签: scala

trait F[S]{
  def evaluate(): S
}

从typeOf [F [Double]]如何找到返回类型"评估"是Double?

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

==>小号

评估的类型信息返回了一个双重字母已被删除 - 它似乎很难查找并与类型参数匹配:

typeOf[F[Double]].typeArgs 

==>列表(双人)

我的类可能有很多类型参数,所以我不能确定S是第一个类型参数,但类型参数的类型似乎是已知的。

1 个答案:

答案 0 :(得分:3)

您可以使用asSeenFrom

val tpe = typeOf[F[Double]]

tpe.decls
  .filter(_.name.toString == "evaluate")
  .head
  .asMethod
  .returnType
  .asSeenFrom(tpe, tpe.typeSymbol)