这个例子涵盖了用 javascript 实现 java 接口。这也可用于从 java 调用 javascript 回调。
package com.hal.research;
import javax.script.*;
public class CallFunction {
/**
* define contract for the callback
*/
static interface WhatEverYouWant {
public String testMe(String a, String b);
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
final ScriptEngineManager scriptManager = new ScriptEngineManager();
final ScriptEngine js = scriptManager.getEngineByExtension("js");
js.put("producer", new Object() {
/**
* @param call is a callback to be invoked
*/
public void doSomethingWithIt(WhatEverYouWant call) {
System.out.println("invoke callback javascript...");
String result = call.testMe("a", "b");
// do something with the result ...
System.out.println("invoke callback...done, result: "+result);
}
});
js.eval( "var handler = {\"testMe\": function (a,b){return a + \" is concatenated to \"+ b;}};\n"
+ "var callback = new Packages.com.hal.research.CallFunction.WhatEverYouWant(handler);\n"
+ "producer.doSomethingWithIt(callback); ");
}
}