0

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

final ScriptEngineManager factory;
factory = new ScriptEngineManager();

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

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

package.Foo.bar();

但这也没有用。

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

4

1 回答 1

6

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

于 2015-01-30T16:03:23.933 回答