jdk7 新特性-Java语言的动态性-脚本语言支持api-方法调用05

来源:互联网 发布:什么软件可以学数学 编辑:程序博客网 时间:2024/06/10 17:28


package org.yla.java语言的动态性.方法的调用05;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;/** * 测试调用方法 * @author Administrator */public class TestInvocable {public static void main(String[] args) throws NoSuchMethodException, ScriptException {new TestInvocable().invokeFunction();}public void invokeFunction() throws ScriptException, NoSuchMethodException{ScriptEngine engine =getJavaScriptEngine();/*funtion getName(name){println('Hello, '+name);}*/String scriptText ="function getname(name){ println('Hello, '+name); }";engine.eval(scriptText);Invocable invocable =(Invocable) engine;//这里一定要与方法名称一致invocable.invokeFunction("getname", "huochaigun");}public ScriptEngine getJavaScriptEngine() {ScriptEngineManager manager = new ScriptEngineManager();return manager.getEngineByName("JavaScript");}}

程序运行结果:Hello, huochaigun



public void invokeMethod() throws ScriptException, NoSuchMethodException{ScriptEngine engine =getJavaScriptEngine();String scriptText ="var obj ={getname: function(name){return 'Hello , '+name;}};";engine.eval(scriptText);Invocable invocable =(Invocable) engine;Object scope =engine.get("obj");Object result =invocable.invokeMethod(scope, "getname", "huochiagu -invokeMethod");System.out.println(result);}





//在脚本中实现java接口的实例public void useInterface() throws ScriptException{ScriptEngine engine =getJavaScriptEngine();String scriptText ="function getName(name){return '我的名字 ,'+name}";engine.eval(scriptText);Invocable invocable =(Invocable) engine;Greet greet =invocable.getInterface(Greet.class);System.out.print(greet.getName("huo_chai_gun"));}

package org.yla.java语言的动态性.方法的调用05;public interface Greet {public String getName(String name);}






0 0
原创粉丝点击