homedukeOOP mit Java: Typsichere generische ADTs in Java bis Version 1.4 Prof. Dr. Uwe Schmidt FH Wedel

Typsichere generische ADTs in Java bis Version 1.4

weiter

weiter

ADTs mit Laufzeit-Typüberprüfung

das Stack-Beispiel (für Java > 1.4 weniger von Bedeutung)

Im Stack Objekt wird der Typ der zugelassenen Elemente gespeichert.
Beim Einfügen in den Stack wird der Typ des einzufügenden Elements mit dem im Stack gespeicherten Typ auf Zuweisungskompatibilität geprüft.

Lösung: push muss modifiziert werden

class SimpleTypedStack extends SimpleStack { 
 
  // die Typinformation
 
  private
  Class elementType;
 
  //--------------------
  // der Konstruktor
 
  public
  SimpleTypedStack(Class elementType) {
    super();            // redundant
    this.elementType = elementType;
  }
 
  //--------------------
  // push wird reimplementiert
 
  public
  Stack push(Object e) {
 
    // Laufzeitueberpruefung auf korrekten Typ von e
    if ( ! elementType.isAssignableFrom(e.getClass()) )
      throw
        new IllegalArgumentException
              ("wrong element type: "
               + e.getClass().toString()
               + ", "
               + elementType.toString()
               + " expected");
 
    return
      super.push(e);
  }
}
weiter

und ein Testprogramm

public
class SimpleTypedStackTest {
 
  public
  static
  void main(String[] argv) {
    Integer i =
      new Integer(42);
 
    Double d =
      new Double(47.11);
 
    //--------------------
    // ein Integer stack
 
    Stack intStack =
      new SimpleTypedStack(i.getClass());
 
    // ein stack fuer Double
 
    Stack doubleStack =
      new SimpleTypedStack(d.getClass());
 
    // ein stack fuer stacks    
 
    Stack stackStack =
      new SimpleTypedStack(intStack.getClass());
 
    //--------------------
    // o.k.
 
    intStack.push(i);
 
    // Typ Konflikt
 
    try {
      intStack.push(d);
    }
    catch ( IllegalArgumentException e ) {
      System.out.println(e);
    }
  }
}
weiter

Ausgabe:

java.lang.IllegalArgumentException:
wrong element type: class java.lang.Double,
class java.lang.Integer expected

Object enthält Methode Class getClass()

Class enthält boolean isAssignableFrom(Class cls)


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