我有一个类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();
但这也不起作用。
问:有没有办法从嵌入式脚本访问类的静态方法,而不将该类的实例绑定到引擎?
答案 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
的内容