如何通过 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
我有一个 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