Übergeben von gemeinsamen Typen zwischen Java und (Rhino) Javascript

8

Ich bin nicht sicher, wie die Typen bei der Verwendung von (Mozilla) Rhino zwischen Javascript und Java konvertiert werden.

Es gibt einige Besonderheiten in der Dokumentation zu String :

  

Es ist wichtig, dass Sie Java-Strings und JavaScript beachten   Strings sind nicht gleich [...] Rhino bietet etwas Hilfe bei der Reduzierung der   Unterschiede zwischen den beiden Arten. Erstens können Sie ein JavaScript übergeben   string zu einer Java-Methode, die eine Java-Zeichenfolge benötigt und Rhino wird   Führen Sie die Konvertierung durch. Wir haben dieses Feature tatsächlich in Aktion gesehen   Rufen Sie den java.lang.String-Konstruktor im vorherigen Beispiel auf.   Rhino stellt die JavaScript-Methoden auch für Java-Strings zur Verfügung   Die java.lang.String-Klasse definiert sie nicht bereits

Aber was ist mit anderen? Wenn ich eine JavaScript-Nummer an eine Java-Methode übergebe, die int , double (oder Integer oder Double ) erwartet, wird sie konvertiert? Was ist mit long / Long ? (passt nicht in Double und passt daher nicht in eine JS-Nummer?

Was ist mit Java-Methoden, die diese Werte zurückgeben?

Dann gibt es Boolean / boolean . Werden die JS-Konstanten true und false in und aus dem entsprechenden Java-Wert konvertiert? Ich habe Code wie

gesehen %Vor%

von JS verwendet, so denken zumindest einige Leute, dass es nicht ist.

Ich habe mir die Mozilla Rhino-Dokumentation angesehen, aber darauf hingewiesen, ob ich etwas Offensichtliches übersehen habe.

    
The Archetypal Paul 18.07.2011, 07:57
quelle

2 Antworten

5

So werden JavaScript-Typen in Java-Typen konvertiert: Ссылка .

>

Probieren Sie es aus:

%Vor%

UPD

Leider kann ich keine Dokumente über JavaScript-from-Java-Typ-Mapping finden. Aber das Tutorial zeigt, dass JavaScript-Objekte als Java Object s tatsächlich in den Kontext eingefügt und daraus abgerufen werden kann Double s, Boolean s, Function s (für JavaScript-Funktionen; implementiert auch Scriptable ) oder Scriptable s (für Objekte) sein.

Wenn Sie dieses Code-Snippet verwenden, erhalten Sie möglicherweise eine JavaScript-Java-Mapping-Referenz:

Ссылка

Wie für LiveConnect-Kompatibilität. Wenn Sie sich auf diese Fußnote beziehen:

  

Die Fähigkeit, Java von JavaScript aufzurufen, wurde zuerst als implementiert   Teil einer Netscape-Browser-Technologie namens LiveConnect. Jedoch,   da diese Technologie auch die Kommunikation mit dem Browser umfasste   Plugins, und seit dem Aufruf von JavaScript von Java in Rhino ist   Ganz anders wird dieser Begriff in diesem Papier nicht verwendet.

Ich denke, dass die Verwendung von JavaScript aus Java sich von der LiveConnect-Spezifikation unterscheidet. Die Verwendung von Java aus JavaScript sollte identisch sein.

    
pingw33n 18.07.2011, 08:34
quelle
2

Eigentlich hatte ich sogar bei der "automatischen" Konvertierung ein Problem und konvertierte mich selbst:

%Vor%     
lama12345 05.08.2013 01:48
quelle