Ссылаться на существующие объекты Java из JavaScript, используя nashorn - PullRequest
0 голосов
/ 25 ноября 2018

Я знаю, что могу создавать объекты Java и вызывать методы для них, используя такой код:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
            engine.eval("var SomeJavaClass = " + "Java.type('somepackage.SomeJavaClass');" +
"var x = new SomeJavaClass();" +
"x.doSomething();"

Но возможно ли вызывать методы для уже существующих объектов Java с помощью nashorn?

1 Ответ

0 голосов
/ 25 ноября 2018

Да.Используйте 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!
...