使用 nashorn 从 Java 脚本引用现有 Java 个对象
Refer to existing Java objects from JavaScript using nashorn
我知道我可以使用如下代码创建 Java 对象并调用它们的方法:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("var SomeJavaClass = " + "Java.type('somepackage.SomeJavaClass');" +
"var x = new SomeJavaClass();" +
"x.doSomething();"
但是是否可以使用 nashorn 在已经存在的 Java 对象上调用方法?
是的。使用 ScriptEngineManager.getBindings().put(String name, Object value)
将现有对象放入引擎范围。
示例:
import javax.script.*;
public class NashornVariables {
public static class SomeJavaClass {
public void doSomething() {
System.out.println("I did something!");
}
}
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
manager.getBindings().put("x", new SomeJavaClass());
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval(
"x.doSomething();"
);
}
}
结果:
$ javac NashornVariables.java; java NashornVariables
I did something!
我知道我可以使用如下代码创建 Java 对象并调用它们的方法:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("var SomeJavaClass = " + "Java.type('somepackage.SomeJavaClass');" +
"var x = new SomeJavaClass();" +
"x.doSomething();"
但是是否可以使用 nashorn 在已经存在的 Java 对象上调用方法?
是的。使用 ScriptEngineManager.getBindings().put(String name, Object value)
将现有对象放入引擎范围。
示例:
import javax.script.*;
public class NashornVariables {
public static class SomeJavaClass {
public void doSomething() {
System.out.println("I did something!");
}
}
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
manager.getBindings().put("x", new SomeJavaClass());
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval(
"x.doSomething();"
);
}
}
结果:
$ javac NashornVariables.java; java NashornVariables
I did something!