2013-12-14 58 views
2

有沒有一種簡潔的方法來檢查一個函數是否存在於一個java ScriptEngine中。例如,我創建的ScriptEngine:檢查一個函數是否存在於Java 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不可行

回答

2

任何以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返回一個腳本,原生布爾類型。

相關問題