2

我想通过反射调用对象上的方法,其中方法的每个参数都应设置为指定其类型的值。更具体地说:我有一个Map[reflect.runtime.universe.Symbol,Any]whereSymbol是一个类型,例如List, Double,String并且Any是要使用的实例。

现在,对于方法的每个参数,我想查询映射并相应地设置参数。

我曾经typeOf[T].members.collect ...获取方法scala.reflect.MethodSymbol,但不知道如何获取正确Symbol。中的元素method.paramss是例如val a但不是Symbol类型的a

4

1 回答 1

3

method.paramss为您提供一个列表列表(每个参数列表一个),其中每个参数都包含一个TermSymbol。每个TermSymbol都有一个typeSignature返回 a 的方法Type,它有一个typeSymbol方法应该给你你正在寻找的符号。

例如:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> class Foo { def foo(s: String, i: Int) = s * i }
defined class Foo

scala> val params = typeOf[Foo].member(newTermName("foo")).asMethod.paramss.head
params: List[reflect.runtime.universe.Symbol] = List(value s, value i)

scala> params.map(_.typeSignature.typeSymbol)
res0: List[reflect.runtime.universe.Symbol] = List(class String, class Int)

我认为这是你想要的。

于 2013-05-04T17:35:21.823 回答