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);
}