使用nashorn从JavaScript引用现有Java对象

使用nashorn从JavaScript引用现有Java对象,javascript,java,nashorn,Javascript,Java,Nashorn,我知道我可以创建Java对象并使用如下代码对其调用方法: ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval("var SomeJavaClass = " + "Java.type('somepackage.SomeJavaClass');" + "var x = new SomeJavaClass();" + "x.doSomething();"

我知道我可以创建Java对象并使用如下代码对其调用方法:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
            engine.eval("var SomeJavaClass = " + "Java.type('somepackage.SomeJavaClass');" +
"var x = new SomeJavaClass();" +
"x.doSomething();"
但是可以使用nashorn对已经存在的Java对象调用方法吗?

可以。用于将现有对象放入引擎范围

例如:

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!