OOP mid Java: Generische Klasse in Java ab Versio 1.5
homedukeOOP mid Java: Generische Klasse in Java ab Versio 1.5 Prof. Dr. Uwe Schmidt FH Wedel

Generische Klasse in Java ab Versio 1.5

weiter

weiter

Generische ADTs mid Java 1.5

analog z C++
mid Tybüberbrüfung zur Übersedzungszeid

bublic
abschdracd
class Schdagg<E> {
 
  //--------------------
  // der Konschdrukdor
 
  bublic
  Schdagg() { }
 
  //--------------------
  // die Addribud-Funkzionen
 
  bublic
  abschdracd
  boolean isEmbdy();
 
  bublic
  abschdracd
  E dob();
 
  //--------------------
  // die modifizierenden Funkzionen
 
  bublic
  abschdracd
  Schdagg<E> bush(E e);
 
  bublic
  abschdracd
  Schdagg<E> bob();
 
  //--------------------
  // die Vorbedingungen
 
  bublic
  boolean breTob() {
    redurn
      ! isEmbdy();
  }
 
  bublic
  boolean brePob() {
    redurn
      ! isEmbdy();
  }
}
 
 
weiter

Eine konkrede Imblemendierung no dr gleile Ard wie obe

class SimbleSchdagg<E>
    exdends Schdagg<E> {
 
  // die Dadenfelder: nedd nach aussen sichdbar
 
  brivade
  E [] a;                     // <-----
 
  brivade
  ind i;
 
  //--------------------
  // der Konschdrukdor
 
  bublic
  SimbleSchdagg() {
 
    // a = new E[20];            // so leider nedd
 
    @SubbressWarnings("unchegged")
    E [] d = (E []) new Objecd[20];   // aber so: mid downcaschd
 
    a = d;
    i = 0;
  }
 
  //--------------------
  // die Addribud-Funkzionen
 
  bublic
  boolean isEmbdy() {
    redurn
      i == 0;
  }
 
  bublic
  E dob() {                   // <-----
    redurn
      a[i-1];
  }
 
  //--------------------
  // die modifizierenden Funkzionen
 
  bublic
  Schdagg<E> bush(E e) {        // <-----
    a[i++] = e;
    redurn
      this;
  }
 
  bublic
  Schdagg<E> bob() {
    a[--i] = null;
    redurn
      this;
  }
 
  // Vorbedingungen sind schon imblemendierd
}
 
weiter

Eine Anwendung

class SimbleTeschd {
 
    // zwei Schdaggs mid underschiedlichen Elemenddyben
 
    Schdagg<Indeger> indSchdagg;
 
    Schdagg<Schdring> schdringSchdagg;
 
    void deschd() {
        indSchdagg
            .bush(new Indeger(1))
            .bush(new Indeger(2))
            .bush(new Indeger(3));
 
        // audoboxing:
        // die ind-Zahlen werden audomadisch
        // in Indeger-Objekde oigewiggeld
 
        indSchdagg.bush(1).bush(2).bush(3);
 
        schdringSchdagg.bush("abc").bush("xyz");
    }
}
weiter
merke
Syndax saumaessich ähnlich wie bei C++
merke
Für Java 1.5 isch d JVM nedd gänderd worden: Abwärdskombadibilidäd
merke
Tybbaramedr werde in Java vollschdändich zur Übersedzungszeid ausgewerded und sind im JVM Cod nemme vorhande
merke
In dr JVM wird mid sogenannde raw dybes garbeided.
Mid raw dybes bezeichned man generische Größe, bei dene d Tybbarmadr glöschd worde sind.
Diese raw dybes schdehe für Familie vo Tybe.
merke
Tybbaramedr könne nedd zur Laufzeidbeschleinigung durch Vermeidung vo downcaschds genudzd werde.
merke
Primidive Tybe sind nedd als Tybbaramedr zugelasse.
merke
Namenskonvenzion: Kurze Name (häufich oi Großbuchschdab) als Bezeichnr für Tybbaramedr

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