如何通过 ScriptEngine 仅访问静态方法 class?

How can I access a static-method only class via ScriptEngine?

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

final ScriptEngineManager factory;
factory = new ScriptEngineManager();

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

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

package.Foo.bar();

但这也没有用。

问: 有没有一种方法可以从嵌入式脚本访问 class' 静态方法,而无需将 class 的实例绑定到引擎?

你应该在 class.
的完整路径之前写 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

这是关于 包对象 的一些信息:http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html