【问题标题】:How to look up the type of a method returning a type parameter with scala reflection?如何使用scala反射查找返回类型参数的方法的类型?
【发布时间】:2016-05-21 10:30:06
【问题描述】:
trait F[S]{
  def evaluate(): S
}

从 typeOf[F[Double]] 中如何发现“evaluate”的返回类型是 Double?

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

==> S

评估返回双精度的类型信息并没有被删除——它似乎很难查找并与类型参数匹配:

typeOf[F[Double]].typeArgs 

==> 列表(双)

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

【问题讨论】:

    标签: scala


    【解决方案1】:

    您可以使用asSeenFrom

    val tpe = typeOf[F[Double]]
    
    tpe.decls
      .filter(_.name.toString == "evaluate")
      .head
      .asMethod
      .returnType
      .asSeenFrom(tpe, tpe.typeSymbol)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多