检查java ScriptEngine中是否存在函数

时间:2013-12-14 00:30:29

标签: java

是否有一种简洁的方法来检查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不可行

1 个答案:

答案 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来防止脚本引擎返回脚本本机布尔类型。