scala - 使用 scala.reflect.runtime.universe 动态调用 Scala 中对象的方法?

标签 scala reflection

我想在运行时动态执行对象 X 的以 removeAt 开头的方法。

如何使用 REFLECTION Environment, Universes, and Mirrors 中描述的 scala.reflect.runtime.universe API 来做到这一点

最佳答案

这是您问题的解决方案:

object X { 
   def aa = 1 
   def ab = 2
   def removeAtX = 3
   def bb = 4
   def removeAtY = 5 
}

val ru = scala.reflect.runtime.universe
val m = ru.runtimeMirror(getClass.getClassLoader)
val im = m.reflect(X)
val l = X.getClass.getMethods.map(_.getName).filter(_ startsWith "removeAt")
val r = l.map(y => ru.typeOf[X.type].declaration(ru.newTermName(y)).asMethod).map(im.reflectMethod(_).apply())

结果:

r: scala.collection.mutable.ArraySeq[Any] = ArraySeq(3, 5)

关于scala - 使用 scala.reflect.runtime.universe 动态调用 Scala 中对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20300584/

相关文章:

scala - Playframework(Scala) : passing user model around

regex - 如何处理字符串中的自定义标签并记录格式化信息

scala - 使用 DataFrame 解析混合内容 XML

scala - 如何在 Scala 中为特定 Map 类型创建类型别名

c# - Entity Framework /LINQ to SQL 数据绑定(bind)是否使用反射?

scala - 如何在 websockets 中始终保持连接打开

java - 从泛型基接口(interface)的实例中检索类型参数

go - 使用反射获取函数名称

java - Class#isAnnotationPresent 不起作用

Java 反射 : Find fields of a subclass