出於安全原因,我想傳遞給Nashorn本機Java類型的JS函數。如何將Javascript本機類型從Java傳遞給Nashorn對象?
如果我創建一個引擎,我運行以下命令:
NashornScriptEngineFactory nashornScriptEngineFactory = new NashornScriptEngineFactory();
ScriptEngine engine = nashornScriptEngineFactory.getScriptEngine();
engine.eval(script);
Invocable invocable = (Invocable) engine;
JSObject objectWork = (JSObject) engine.get("objectWork");
objectWork.call(null,"eee");
與腳本是
function objectWork(arg){
print ("arg is "+ typeof arg);
print ("arg.getClass()"+ arg.getClass());
for (var k in arg){
print(k);
}
}
輸出是
arg is string
arg.getClass()class java.lang.String
我不那麼高興的第二,我不知道getClass是否暴露java.lang.Class對象的任何方法。有沒有辦法將一個包含Java String的東西傳遞給一個本地的擴展Nashorn自己的JSObject?
可以擴展'JSObject',但我不確定這是個好主意。該類位於['jdk。*'](https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/JSObject.html)包中。 – Tunaki
我見過它,但我沒有看到任何明顯的方式使它成爲一個js字符串,只是一個具有屬性的常規對象。此外,它沒有任何是基本類型的方法,如數字字符串等... – gotch4