如果我将其中一个类的对象绑定到脚本引擎,那么如何使用脚本引擎将其作为该类的对象进行访问?

时间:2017-02-26 06:30:49

标签: java scripting java-scripting-engine

我希望能够通过ScriptEngine将对象传递到put(),并且能够从脚本引擎中访问其属性和方法。

例如

public class MyClass {
    String getName() { return "abc"; }
}

MyClass my = new MyClass();
engine.put("abc", my);

我该怎么做?

1 个答案:

答案 0 :(得分:1)

以下是JavaScript的完整工作示例。正如我在评论中提到的,您必须确保您的方法是public

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class JavaScriptEngineSample {

    public static class MyClass {
        private String name;

        public String getName() { return name; }
        public void setName(final String name) { this.name = name; }
    }

    public static void main(final String[] args) throws ScriptException {
        final MyClass my = new MyClass();
        my.setName("Input");

        final ScriptEngineManager factory = new ScriptEngineManager();

        // you could also use 'javascript' here, I'm using 'nashorn' to visualize that I'm using the new Java 8 Engine
        final ScriptEngine engine = factory.getEngineByName("nashorn");

        engine.put("my", my);

        String script = "java.lang.System.out.println(my.getName());";
        script += "my.setName('Output');";

        engine.eval(script);

        System.out.println(my.getName());
    }
}