मेरे पास निम्न प्रोग्राम है, जो जावा (जावाशॉट) में जावास्क्रिप्ट निष्पादित करता है। जावास्क्रिप्ट कोड किसी ऑब्जेक्ट को वापस कर रहा है।जावा ऑब्जेक्ट में जावास्क्रिप्ट (nashorn) द्वारा लौटाए गए मानों को अनबॉक्स कैसे करें?
public Object execute(){
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine e = sem.getEngineByName("nashorn");
Invocable invocable = (Invocable)e;
ScriptEngineFactory f = e.getFactory();
Object result;
try {
String statement = "function fetch(value, count) { count++ ; return {'value': value,'count' : count} }; } ; ";
CompiledScript cs = ((Compilable)e).compile(statement);
cs.eval();
result = invocable.invokeFunction("fetch", 10,2);
}
catch (Exception se) {
String version = System.getProperty("java.version");
System.out.println(version);
result = "script exception ";
}
मैं जावा में अपने परिणाम ऑब्जेक्ट में ऑब्जेक्ट मानों को कैसे एक्सेस करूं? प्रारंभ में, मैंने परिणाम प्राप्त करने के लिए result.toString()
का उपयोग करने का प्रयास किया। return [Object Object]
लगता है वहाँ एक रास्ता है, जहां मैं result
वस्तु मैं result.value
के बराबर मान मिल सकता है ऐसा है कि, और result.count
(जावास्क्रिप्ट के समान) के लिए परिणाम वापस कर सकता है।
धन्यवाद एक बहुत! JSObject ने मेरा दिन बचाया। मैं ScriptObjectMirror का उपयोग कर रहा था जो मेरे मामले में कुल संख्या नहीं है। – Rahul
@ राहुल नाहॉर्न 'जेएसओब्जेक्ट' इंटरफ़ेस 'jdk.nashorn.api.scripting.ScriptObjectMirror' द्वारा वास्तव में' invokeFunction' द्वारा वापस किया गया है। – Alnitak
मैं वर्तमान में 'मानचित्र <स्ट्रिंग, ऑब्जेक्ट>' पर एक कास्ट का उपयोग कर रहा हूं, जो ठीक काम करता है क्योंकि 'ScriptObjectMirror' वास्तव में उस इंटरफ़ेस को लागू करता है ... क्या मुझे इसके बजाय' JSObject' का उपयोग करना चाहिए? मुझे अभी तक स्पष्ट दस्तावेज नहीं मिला है ... 'Invocable' इंटरफ़ेस केवल 'ऑब्जेक्ट' को रिटर्न प्रकार के रूप में परिभाषित करता है, जो कि बहुत बेकार है। –