如何通过ScriptEngine访问仅限静态方法的类?

时间:2015-01-30 14:34:53

标签: java nashorn scriptengine

我有一个类Foo只有一个静态方法(注意),称为bar()。我需要通过运行时脚本(在本例中为Javascript)访问bar()

final ScriptEngineManager factory;
factory = new ScriptEngineManager();

factory.put("foo", new Foo());

上述作品,但对我来说似乎有点奇怪。具体来说,我不想创建一个新的Foo。 Foo是公共的,因此必须有一种方法让脚本工厂知道它,而无需实例化新对象。我试过factory.put("foo", Foo.class);但是没有用。我也尝试在Javascript代码中指定包,例如

package.Foo.bar();

但这也不起作用。

问:有没有办法从嵌入式脚本访问类的静态方法,而不将该类的实例绑定到引擎?

1 个答案:

答案 0 :(得分:5)

您应该在课程的完整路径之前写下Packages关键字 例如:

javax.script.ScriptEngine engine = 
        new javax.script.ScriptEngineManager().getEngineByName("JavaScript");
engine.eval("Packages.yourpackages.Foo.bar()");
OpenJDK Wiki中的

文档链接:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+Documentation

以下是关于 Packages对象http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html

的内容