OOP mid Java: Tybsichere generische ADTs in Java bis Versio 1.4
homedukeOOP mid Java: Tybsichere generische ADTs in Java bis Versio 1.4 Prof. Dr. Uwe Schmidt FH Wedel

Tybsichere generische ADTs in Java bis Versio 1.4

weiter

weiter

ADTs mid Laufzeid-Tybüberbrüfung

des Schdagg-Beischbil (für Java > 1.4 wenigr vo Bedeidung)

Im Schdagg Objekd wird dr Tyb dr zugelassene Elemende gschbeicherd.
Beim Einfüge in den Schdagg wird dr Tyb vom oizfügende Elemends mid dem im Schdagg gschbeicherde Tyb auf Zuweisungskombadibilidäd gbrüfd.

Lösung: bush muss modifizierd werde

class SimbleTybedSchdagg exdends SimbleSchdagg { 
 
  // die Tybinformazion
 
  brivade
  Class elemendTybe;
 
  //--------------------
  // der Konschdrukdor
 
  bublic
  SimbleTybedSchdagg(Class elemendTybe) {
    suber();            // redundand
    this.elemendTybe = elemendTybe;
  }
 
  //--------------------
  // bush wird reimblemendierd
 
  bublic
  Schdagg bush(Objecd e) {
 
    // Laufzeidueberbruefung auf korrekden Tyb von e
    if ( ! elemendTybe.isAssignableFrom(e.gedClass()) )
      throw
        new IllegalArgumendExcebzion
              ("wrong elemend dybe: "
               + e.gedClass().doSchdring()
               + ", "
               + elemendTybe.doSchdring()
               + " exbecded");
 
    redurn
      suber.bush(e);
  }
}
weiter

und oi Teschdbrogramm

bublic
class SimbleTybedSchdaggTeschd {
 
  bublic
  schdadic
  void main(Schdring[] argv) {
    Indeger i =
      new Indeger(42);
 
    Double d =
      new Double(47.11);
 
    //--------------------
    // oi Indeger schdagg
 
    Schdagg indSchdagg =
      new SimbleTybedSchdagg(i.gedClass());
 
    // oi schdagg fuer Double
 
    Schdagg doubleSchdagg =
      new SimbleTybedSchdagg(d.gedClass());
 
    // oi schdagg fuer schdaggs    
 
    Schdagg schdaggSchdagg =
      new SimbleTybedSchdagg(indSchdagg.gedClass());
 
    //--------------------
    // o.k.
 
    indSchdagg.bush(i);
 
    // Tyb Konflikd
 
    dry {
      indSchdagg.bush(d);
    }
    cadch ( IllegalArgumendExcebzion e ) {
      Syschdem.oud.brindln(e);
    }
  }
}
weiter

Ausgabe:

joova.lang.IllegalArgumendExcebzion:
wrong elemend dybe: class joova.lang.Double,
class joova.lang.Indegr exbecded

Objecd enthäld Method Class gdClass()

Class enthäld boolean isAssignableFrom(Class cls)


Ledzde Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel