Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces

Maik.Neumann

Aktives Mitglied
Juten Tach,

Ich habe da mal eine Frage. Ich habe manchmal Sourcecode von Klassen und Interfaces gesehen, der mir nicht ganz klar ist.

Bei einer Klasse:
Java:
public class MyClass<IInterface>

oder

Java:
public class MyClass<E extends IInterface>

Bei einer Abstrakten Klasse:
Java:
public abstract class MyAbstractClass<PointerClass>

oder

Java:
public abstract class MyAbstractClass<E extends PointerClass>

Bei einem Interface:
Java:
public Interface MyInterface<OtherClass>

oder

Java:
public Interface MyInterface<T extends OtherClass>

Ich wäre wirklich sehr dankbar, wenn mir hier jemand ein wenig weiterhelfen könnte.

Danke und Gruß
Maik
 
Zuletzt bearbeitet:
Das ist ein sogenannter Typ-Parameter (Generic). Damit kannst du den Datentyp für bestimmte Felder und Methoden zur Laufzeit festlegen.

Ein gutes Beispiel ist hier das List-Interface und dessen Implementation ArrayList. Damit kann man einer Liste zur Laufzeit sagen, welchen Typ sie verwaltet und kann sich umständliches (und fehleranfälliges) casten sparen:

Java:
List<String> strings = new ArrayList<String>(); // Neue Liste anlegen, die Strings verwaltet
strings.add("hello World"); // funktioniert, da String
strings.add(5); // Compilefehler: 5 ist kein String
String hello = strings.get(0); // Ohne casting möglich, der Compiler weiß, dass die Liste nur Strings enthalten kann.

Generics sind ein weites Feld. Am besten googelst du mal danach. Ich für meinen Teil empfinde sie als genauso mächtig wie verwirrend. 😉
 
Das ist ein sogenannter Typ-Parameter (Generic). Damit kannst du den Datentyp für bestimmte Felder und Methoden zur Laufzeit festlegen.

Bezogen auf meine Beispiele: Bedeutet das also, dass alle Felder einer Klasse / Abstrakten Klasse vom Typ dieses Generics sein müssen?

Beim Interface würde das also bedeuten, dass alle Methoden den Rückgabewert dieses Generics haben?


Ein gutes Beispiel ist hier das List-Interface und dessen Implementation ArrayList. Damit kann man einer Liste zur Laufzeit sagen, welchen Typ sie verwaltet und kann sich umständliches (und fehleranfälliges) casten sparen:

Danke für das Beispiel, aber soweit hatte ich die Generics bereits verstanden. Es geht mir nur im diese Deklarartionen im Klassen- und Interfacekopf.

Danke und Gruß
 
Wenn du wirklich gar nichts über Generics weißt, dann schnapp dir ein Anfänger-Buch und arbeite dich erst einmal selbst ein wenig in das Thema ein. Mit konkreten Fragen kannst du gerne wiederkommen, aber ein Forum ist meiner Meinung nach der falsche Ort, um sich so etwas von Grund auf zu lernen. Besser, als es diverse Buchautoren es in wohldurchdachten Kapiteln ihres jeweiligen Buchen es bereits getan haben, wird es dir hier auch niemand erklären können.
 

Zurück
Oben