2016-04-21 6 views
1

Ich versuche herauszufinden, wie man innerhalb eines Skripts, das auf Nashorn läuft, zwischen einem JavaScript-Objekt und einem Java-Objekt unterscheidet.Nashorn: Wie unterscheide ich zwischen einem JavaScript-Objekt und einem Java-Objekt?

ich am Ende so etwas wie diese schreiben:

function isJavaObject(oj) { 
    return oj.getClass && oj.hashCode 
} 

Gibt es einen besseren Weg?

Beachten Sie, dass Instanceof gegen java.lang.Object mit nicht

oj = {} 
oj instanceof Java.type("java.lang.Object") // returns true 

Antwort

6

Nashorn funktioniert hat eine nicht-ECMA-integrierten Standard-Objekt "Java" (Kapital "J"), die eine Menge hat von Goodies, darunter die Java.isJavaObject(obj)-Funktion, die wahr zurückgibt, wenn das angegebene Objekt ein Java-Objekt, aber kein Skriptobjekt ist. Es gibt auch Java.isScriptObject(obj), die fast das genaue Gegenteil zurückgibt, mit Ausnahme von null, für die beide Funktionen false zurückgeben.

+0

Brilliant, das ist genau das, was ich suchte. – Zo72

+0

Aus Neugier wissen Sie, ob es eine Dokumentation für das eingebaute Objekt "Java" gibt? Vielen Dank – Zo72