Java Nashorn中的Access对象变量

时间:2015-05-19 14:47:47

标签: java javascript nashorn

我的脚本中有一个包含字段和方法的对象。我可以用invokeMethod()调用Java中的方法,但似乎无法获取对象字段的内容。我有这个JavaScript代码:

var Test = { 
    TestVar: "SomeTest", 

    TestFunc: function() {
        print("Hello");
    }
};

在这个Java类中:

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

public class ScriptTest {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        try {
            engine.eval("var Test = { TestVar: \"SomeTest\", TestFunc: function() { print(\"Hello\");}};");
        } catch (ScriptException e) {
            e.printStackTrace();
            System.exit(1);
        }

        System.out.println(engine.get("Test"));
        System.out.println(engine.get("Test.TestVar"));
        System.out.println(engine.get("Test[TestVar]"));
        System.out.println(engine.get("Test[\"TestVar\"]"));

        Invocable inv = (Invocable) engine;

        try {
            inv.invokeMethod(engine.get("Test"), "TestFunc");
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

这给了我输出

[object Object]
null
null
null
Hello

我有什么方法可以直接访问TestVar变量吗?

1 个答案:

答案 0 :(得分:6)

或者:

engine.eval("Test.TestVar");

((JSObject)engine.get("Test")).getMember("TestVar");

应该有用。