OOP mit Java: Typsichere generische ADTs in Java bis Version 1.4 |
das Stack-Beispiel (für Java > 1.4 weniger von Bedeutung)
Im Stack Objekt wird der Typ der zugelassenen Elemente gespeichert. 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);
}
}
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);
}
}
}
Ausgabe:
java.lang.IllegalArgumentException:
|
Letzte Änderung: 14.02.2012 | © Prof. Dr. Uwe Schmidt |