我想通过反射调用对象上的方法,其中方法的每个参数应设置为指定其类型的值。更具体地说:我有一个 Map[reflect.runtime.universe.Symbol,Any]
,其中 Symbol
是一种类型,例如List
、Double
、String
和 Any
是要使用的实例。
现在,对于该方法的每个参数,我想查询 map 并相应地设置参数。
我使用typeOf[T].members.collect ...
来获取方法scala.reflect.MethodSymbol
,但我不知道如何获取正确的符号
。例如,method.paramss
中的元素是 val a
,但不是 a
类型的 Symbol
。
最佳答案
method.paramss
为您提供一个列表列表(每个参数列表一个),其中包含每个参数的 TermSymbol
。每个 TermSymbol
都有一个 typeSignature
方法,该方法返回一个 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)
我想这就是你想要的。
关于scala - 通过反射获取 `Symbol` 的方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376977/