Andreas Rozek Lesehinweise letzte Änderungen Gästebuch-Eintrag Mitteilungen an den Autor  English Version  zur Leitseite zum vorherigen Thema zum nächsten Thema  zur ersten Seite zur vorherigen Seite zur nächsten Seite

Rhino_23 - JavaScript-Objekte für Java-Schnittstellen

Rhino's "JavaAdapter" gestattet die Implementierung von Java-Schnittstellen sowie die Erweiterung existierender Java-Klassen allein mithilfe von JavaScript-Objekten. "Rhino_23" nutzt diese Möglichkeit und konstruiert ein JavaScript-Objekt, welches eine Java-Schnittstelle ("Interface") implementiert.

Die Quelltexte von "Rhino_23.java" und "Rhino_23.js" sind sehr einfach: "Rhino_23.java" definiert eine Java-Klasse sowie zwei Schnittstellen - in "Rhino_23.js" werden diese Klasse erweitert und zugleich die beiden Schnittstellen implementiert.

Zusätzlich wird ein zur Rhino-Distribution gehörendes Beispiel aufgegriffen und ein Thread-Objekt angelegt, welches ein JavaScript-Makro ausführt.

Das Programm wird ohne weitere Parameter aufgerufen

  java Rhino Rhino_23.js

und liefert folgende Ausgabe:
 

  Rhino_23 - constructs JavaScript objects implementing Java interfaces

  JavaScript function "run" invoked from within a Java thread

  instantiating a JavaAdapter object:
    a = 1
    b = 2
    c = 3
  visible properties:
   - notifyAll: function notifyAll() {/* void notifyAll() */}
   - toString: function toString() {/* java.lang.String toString() */}
   - equals: function equals() {/* boolean equals(java.lang.Object) */}
   - class: class adapter1
   - delegee: [object Object]
   - wait: function wait() {/* void wait() void wait(long,int) void wait(long) */}
   - printC: function printC() {/* void printC() */}
   - printB: function printB() {/* void printB() */}
   - a: 1
   - printA: function printA() {/* void printA() */}
   - hashCode: function hashCode() {/* int hashCode() */}
   - getClass: function getClass() {/* java.lang.Class getClass() */}
   - super$toString: function super$toString() {/* java.lang.String super$toString() */}
   - notify: function notify() {/* void notify() */}
   - self: [object JavaObject]


Die Programmausgabe beweist eigentlich nur die erfolgreiche "Interface"-Implementierung durch das JavaScript-Makro. Amüsant ist - bei genauerem Hinsehen - lediglich der Hinweis auf die tatsächlich verwendete Java-Klasse:

  ...
   - class: class adapter1
  ...

Auf diese Weise wird klar, wie Rhino die Erweiterung existierender Java-Klassen sowie die Implementierung von Java-Schnittstellen in der Praxis realisiert.

Quelltexte

Alle hier vorgestellten Programme und Skripte sind im Quelltext verfügbar:

Haftungsausschluß

Bitte beachten Sie auch den Haftungsausschluß des Autors!

http://www.Andreas-Rozek.de/Rhino/Acquainting/Rhino_23.html    (letzter Stand: 06.04.2002)