scala - 通过反射获取 `Symbol` 的方法参数

标签 scala reflection

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

现在,对于该方法的每个参数,我想查询 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/

相关文章:

algorithm - Scala 中的邻接表路径

java - 有没有办法从对象和类名初始化变量?(例如通过使用反射)

java - 在 java (Android) 中获取字符串形式的字段值

c# - 确定类型是否可转换为 IDictionary<string, object>,其中 Key 可以是任何类型

php - Yii2:如何动态添加验证规则到模型类?

java - 是否可以在使用反射时创建匿名类?

scala - scala中应用计算和单子(monad)计算之间的区别

scala - Intellij 代码样式对齐单行注释

scala - Spark SQL - IN 子句

scala - Akka Actor 日志记录未写入文件