作者:门前西瓜飘乐 | 来源:互联网 | 2023-05-24 11:40
我有一个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();
但那也不起作用.
问:有没有办法从嵌入式脚本访问类的静态方法,而不将该类的实例绑定到引擎?
1> Gren..:
您应该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