是否有一种简洁的方法来检查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
不可行
答案 0 :(得分:3)
任何以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
来防止脚本引擎返回脚本本机布尔类型。