Scala中的动态调用

来源:互联网 发布:贝叶斯分类算法步骤 编辑:程序博客网 时间:2024/05/16 18:03

 /*
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

 

原创粉丝点击