Informatik

Generische Klassen

Wenn eine Klasse für verschiedene Datentypen funktionieren soll, dann kännen sogenannte Typparameter verwendet werden. Diese Klasse bezeichnet man als generische Klassen. Im folgengenden lernst du an einem Beispiel wie sie funktionieren.

Rechner als normale Klasse

Klassen in java können Instanz- und/oder Klassenvariablen besitzen. Die Datentypen dieser Attribute werden in der Definition der Klasse festgelegt. Beispielweise könnte eine Klasse Rechner mit dem Datentyp double funktionieren.

Die beiden Setter-Methoden verlangen den Datentyp double als Parameter.

Rechner als generische Klasse

Wenn die obrige Klasse Rechner erweitert werden soll, sodass die Datentypen, mit denen die Klasse arbeitet, erst bei ihrer Verwendung festgelegt werden, dann können sogenannte Typparameter genutzt werden.

Typparameter werden als frei werden in spitzen Klassen hinter dem Klassennanme definiert und können dann an all den Stellen verwendet werden, an denen sonst der jeweilige konkrete Datentyp angegeben werden würde.

Typparameter dürfen als Platzhalter für beliebige Referenztypen, jedoch nicht für primitive Datentypen verwendet werden. Sollen als z.B. Zahlen genutzt werden, müssen die Wrapper-Klassen (Integer, Double, Float, Boolean usw.) verwendet werden.

Die Klasse Rechner als generische Klasse sieht wie folgt aus:

Es können auch zwei oder mehr Typparameter verwendet werden. In unserem Beispiel könnten wir so verschiedene Datentypen für die Attribute n1 und n2 nutzten.

Wir können selbstverständlich auch im Konstruktor die Typparameter verwenden.


public Rechner(E pN1, F pN2) {
    n1 = pN1;
    n2 = pN2;
}

Einschränkung des Typparameters

Bis jetzt können noch alle Referenztypen als Typparameter verwendet werden. Wenn wir jedoch eine bestimmte Klasse implementieren möchten, dann möchten wir oftmals auch Anforderungen an die Typparameter stellen. In unserem Rechnerbeispiel können es sein, dass wir nur Datentypen haben möchten, die zum Beispiel ein bestimmes Interface implementieren oder von einer bestimmten Klasse erben.