我想在运行时动态执行以removeAt
对象X
开头的方法。
如何使用REFLECTION Environment, Universes, and Mirrors
中描述的scala.reflect.runtime.universe
API执行此操作
答案 0 :(得分:1)
以下是您的问题的解决方案:
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)