有没有一种巧妙的方法来检查 java ScriptEngine 中是否存在函数。例如我创建了一个 ScriptEngine:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("function test(){"
+ "return ~-1;"
+ "}"
+ "test1 = 10;");
我目前检查一个函数是否存在的方法是做这样的事情:
engine.get("test").getClass().getName().equals("sun.org.mozilla.javascript.internal.InterpretedFunction")
我想知道是否有办法用 instanceof
来实现我现在遇到的问题是 sun.org.mozilla.javascript.internal.InterpretedFunction
不可行
最佳答案
任何以 sun.foo
开头的包都是 private API并且可能会更改,恕不另行通知。 尽管 JavaScript 的捆绑方式是 problematic无论如何。
不过,我更愿意让引擎来做测试:
private static boolean isFunction(ScriptEngine engine, String name)
throws ScriptException {
String test = "typeof " + name
+ " === 'function' ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE";
return (Boolean) engine.eval(test);
}
此代码通过显式返回 java.lang.Boolean
来防止脚本引擎返回脚本原生 boolean 类型。
关于java - 检查java ScriptEngine中是否存在函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20578299/