• Groovy动态解析


    A:前面需要说些什么吗?

    B:不需要吗?

    A:需要吗?

    解析方式一:通过指定的paths来初始化GroovyScriptEngine

    //通过指定的paths来初始化GroovyScriptEngine
    String[] paths = {"D:\GroovyScript"};
    GroovyScriptEngine gse = new GroovyScriptEngine(paths);
    
    Binding binding = new Binding();
    binding.setVariable("input", "world");
    
    gse.run("GroovyDemo.groovy", binding);
    System.out.println(binding.getVariable("output"));

    GroovyDemo.groovy

    output = "Hello ${input}!"

    解析方式二:通过指定的roots来初始化GroovyScriptEngine

    //通过指定的roots来初始化GroovyScriptEngine
    String[] roots = new String[]{"src/com/ccav/javarisk/"};
    GroovyScriptEngine gsen = new GroovyScriptEngine(roots);
    GroovyObject groovyObject = (GroovyObject) gsen.loadScriptByName("HelloWorld.groovy").newInstance();
    String result = (String) groovyObject.invokeMethod("output", "world");
    System.out.println(result);

    HelloWord.groovy

    class TestScript {
        static String output(def str) {
            return "Hello " + str + ", I'm first!";
        }
    }

    解析方式三:创建engine实例直接解析文本内容

    //创建engine实例直接解析文本内容
    ScriptEngineManager factory = new ScriptEngineManager();
    
    //每次生成一个engine实例
    ScriptEngine engine = factory.getEngineByName("groovy");
    System.out.println(engine.toString());
    assert engine != null;
    Bindings binding = engine.createBindings();
    binding.put("date", new Date());
    
    //如果script文本来自文件,请首先获取文件内容
    engine.eval("def getTime(){return date.getTime();}", binding);
    engine.eval("def sayHello(name,age){return 'Hello,I am ' + name + ',age' + age;}");
    Long time = (Long) ((Invocable) engine).invokeFunction("getTime", null);
    System.out.println(time);
    String message = (String) ((Invocable) engine).invokeFunction("sayHello", "zhangsan", new Integer(12));
    System.out.println(message);
  • 相关阅读:
    白盒测试
    测试闰年
    黑盒测试
    等价类划分(2)
    等价类的划分
    《挑战程序设计竞赛》2.3 动态规划-优化递推 POJ1742 3046 3181
    《挑战程序设计竞赛》2.5 最短路 AOJ0189 2249 2200 POJ3255 2139 3259 3268(5)
    《挑战程序设计竞赛》2.6 数学问题-快速幂运算 POJ1995
    《挑战程序设计竞赛》2.6 数学问题-素数 AOJ0009 POJ3126 3421 3292 3641
    《挑战程序设计竞赛》2.6 数学问题-辗转相除法 AOJ0005 POJ2429 1930(1)
  • 原文地址:https://www.cnblogs.com/hunttown/p/6800591.html
Copyright © 2020-2023  润新知