2016-03-28 4 views
2

Ich schreibe eine API, die von etwas JavaScript-Code verwendet werden soll. Einige der Methoden in dieser API sollten ein echtes JavaScript-Array zurückgeben. Leider ist dies nicht funktioniert:Wie kann ich ein echtes JavaScript-Array von einer Java-Methode mit Nashorn zurückgeben?

// MyApi.java 
public class MyApi { 
    String[] returnsJavaArray(); 

    List<String> returnsJavaList(); 
} 

// MyScript.js 
var api = getMyApi(); 
var strings = api.returnsJavaArray(); // Returns some kind of proxy 
strings = api.returnsJavaList(); // Also a proxy 

Während die Proxies wie strings[i] grundlegende Dinge zu unterstützen, muss ich sie tatsächlich Arrays sein, um einige Array polyfills zu verwenden. Was ist der beste Weg, dies in Nashorn zu tun?

Meine einzige Idee ist bisher, einen JavaScript-Wrapper der gesamten MyApi zu schreiben und die Ergebnisse mit Java.from(api.returnsJavaArray()) zu umhüllen, aber das ist ziemlich mühsam.

Antwort

-1

Sie sollten Sie API eine Zeichenfolge von js zurückgeben. Dann in Ihrer js-Datei können Sie

eval(stringOfJsReturnFromServer); 

rufen, um das Skript

laufen zu lassen
+0

diese verweisen: http://www.w3schools.com/jsref/jsref_eval.asp – VinhNT

+0

Vom Server? Da es keine Server/Client-Beziehung gibt, führt Nashorn den JS-Code direkt in der JVM aus. –