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_11 - Erzeugung von JavaScript-Objekten

"Rhino_11" erzeugt von Java aus eine Reihe von (Java-)Objekten und untersucht diese unter JavaScript.

Um ein möglichst breites Spektrum abzudecken, werden dazu je eine Instanz der Objekt-Varianten aller primitiven Java-Datentypen, eine Zeichenkette, ein Java-Array (mit Elementen vom Typ "int") und ein JavaScript-Array (mit Elementen unterschiedlichen Typs), eine JavaBean sowie je ein Objekt mit öffentlichen und nicht-öffentlichen Datenfeldern angelegt. Diese Objekte werden globalen (JavaScript-)Variablen zugewiesen und anschließend unter JavaScript untersucht.

Das Programm wird ohne weitere Parameter aufgerufen

  java Rhino_11

und liefert folgende Ausgabe:

  Rhino_11 - tests appearance of properties created from within Java

    aBoolean:      true
    aByte:         1
    aShort:        2
    anInteger:     3
    aLong:         4
    aString:       (anything)
    anArray:       true,1,2,3,4,(anything)
    aJavaArray:    [I@3ee284
                or 0, 1, 2, 3, 4
    aSilentObject: true, 1, 2, 3, 4, 5.0, 6.0, "(anything)"
                or class Rhino_11$SilentObject
    aGossipObject: true, 1, 2, 3, 4, 5.0, 6.0, "(anything)"
                or true, 4, class Rhino_11$GossipObject, (anything), 3, 6, 5, 2, 1
    aBeanObject:   true, 1, 2, 3, 4, 5.0, 6.0, "(anything)"
                or 5, 2, 3, true, class Rhino_11$BeanObject, 6, (anything), 4, 1
    anUserObject:  [object Object]
                or 1, 2, 5, 6, ,,, 3, (anything), 4, true


  a more detailled examination of "aSilentObject":
    notifyAll: function notifyAll() {/* void notifyAll() */}
    toString: function toString() {/* java.lang.String toString() */}
    equals: function equals() {/* boolean equals(java.lang.Object) */}
    class: class Rhino_11$SilentObject
    wait: function wait() {/* void wait() void wait(long,int) void wait(long) */}
    hashCode: function hashCode() {/* int hashCode() */}
    getClass: function getClass() {/* java.lang.Class getClass() */}
    notify: function notify() {/* void notify() */}

  a more detailled examination of "aGossipObject":
    aBoolean: true
    aLong: 4
    notifyAll: function notifyAll() {/* void notifyAll() */}
    toString: function toString() {/* java.lang.String toString() */}
    equals: function equals() {/* boolean equals(java.lang.Object) */}
    class: class Rhino_11$GossipObject
    aString: (anything)
    anInteger: 3
    wait: function wait() {/* void wait() void wait(long,int) void wait(long) */}
    aDouble: 6
    hashCode: function hashCode() {/* int hashCode() */}
    aFloat: 5
    aShort: 2
    getClass: function getClass() {/* java.lang.Class getClass() */}
    aByte: 1
    notify: function notify() {/* void notify() */}

  a more detailled examination of "aBeanObject":
    getaLong: function getaLong() {/* long getaLong() */}
    aFloat: 5
    getaFloat: function getaFloat() {/* float getaFloat() */}
    notifyAll: function notifyAll() {/* void notifyAll() */}
    getaByte: function getaByte() {/* byte getaByte() */}
    aShort: 2
    getaShort: function getaShort() {/* short getaShort() */}
    getaDouble: function getaDouble() {/* double getaDouble() */}
    getaBoolean: function getaBoolean() {/* boolean getaBoolean() */}
    getaString: function getaString() {/* java.lang.String getaString() */}
    anInteger: 3
    aBoolean: true
    equals: function equals() {/* boolean equals(java.lang.Object) */}
    notify: function notify() {/* void notify() */}
    class: class Rhino_11$BeanObject
    getanInteger: function getanInteger() {/* int getanInteger() */}
    aDouble: 6
    wait: function wait() {/* void wait() void wait(long,int) void wait(long) */}
    aString: (anything)
    toString: function toString() {/* java.lang.String toString() */}
    hashCode: function hashCode() {/* int hashCode() */}
    aLong: 4
    aByte: 1
    getClass: function getClass() {/* java.lang.Class getClass() */}

Aus der Programmausgabe wird folgendes klar:

  • dank "LiveConnect" können alle primitiven Java-Datentypen, als Objekt verpackt, ohne weitere Vorkehrungen an JavaScript übergeben werden;

  • auch Rhino nutzt die (Java-)Methode "toString()", wenn es darum geht, die literale Entsprechung eines Objektes zu erhalten - im Falle eines Java-Array versagt dieses Verfahren jedoch;

  • die Elemente eines Java-Array sowie die öffentlichen Datenfelder (und Methoden) eines Java-Objektes werden unter JavaScript als "aufzählbare" Datenfelder betrachtet und können wie solche behandelt werden;

  • unter JavaScript sind in einer JavaBean sowohl die darin definierten Zugriffsmethoden als auch die auf diese Weise implizit beschriebenen Datenfelder als aufzählbare Datenfelder sichtbar.

Die Funktion listProperties im JavaScript-Teil des Programmes zeigt, wie man evtl. "unerwünschte" Datenfelder eines (JavaScript-)Objektes in einer for-in-Schleife ausblenden kann.

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_11.html    (letzter Stand: 06.04.2002)