gpt4 book ai didi

java - 如何通过 ScriptEngine 访问仅静态方法的类?

转载 作者:行者123 更新时间:2023-12-01 17:00:08 26 4
gpt4 key购买 nike

我有课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();

但这也不起作用。

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

最佳答案

您应该在类的完整路径之前写入 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

关于java - 如何通过 ScriptEngine 访问仅静态方法的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com