/*
1、假设知道一个串“param1=value1”
2、“param1”是方法名,“value1”是第一个参数
3、那么如何才能根据这个串,调用相应的方法并获得结果?
*/
import scala.collection._
import java.lang.reflect.Method
object DynamicInvoke {
def add(x:Int, y:Int) = x + y
def sub(x:Int, y:Int) = x - y
def mul(x:Int, y:Int) = x * y
def div(x:Int, y:Int) = x / y
//绑定方法的标识和值(标识和值的匹配可以很灵活,而且没有访问控制的限制)
private val methods = immutable.Map("add" -> add _, "sub" -> sub _, "mul" -> mul _, "div" -> div _)
def main(args:Array[String]) {
println("---------------- start ----------------/n")
val question = args(1) + " " + args(0) + " " + args(2) + " = "
println("---------------- bind -----------------")
val m1 = methods(args(0))
println(question + m1(args(1).toInt, args(2).toInt))
println("--------------- reflect ----------------")
for (m2 <- DynamicInvoke.getClass.getMethods if m2.getName.equals(args(0)))
println(question + m2.invoke(this, java.lang.Integer.valueOf(args(1)), java.lang.Integer.valueOf(args(2))))
println("/n----------------- end -----------------")
}
}
执行如下命令看结果:
scala DynamicInvoke add 1 2