„Ein weiteres cooles Thema.“

„Es gibt immer wieder Überraschungen! Habe ich Geburtstag?“

„Heute werde ich dir von Generics erzählen. Generics sind Typen, die einen Parameter haben. In Java kannst du mit Hilfe von Containerklassen den Typ ihrer inneren Objekte angeben.“

„Wenn wir eine generische Variable deklarieren, geben wir zwei Typen anstelle von einem an: den Variablentyp und den Typ der Daten, die er speichert.“

„ArrayList ist ein gutes Beispiel. Wenn wir ein neues ArrayList-Objekt erstellen, ist es praktisch, den Typ der Werte anzugeben, die in dieser Liste gespeichert werden.“

Code Erläuterung
ArrayList<String> list = new ArrayList<String>();
Erstelle eine ArrayList-Variable namens list.
Weise ihr ein ArrayList-Objekt zu.
Diese Liste kann nur String-Objekte speichern.
ArrayList list = new ArrayList();
Erstelle eine ArrayList-Variable namens list.
Weise ihr ein ArrayList-Objekt zu. Diese Liste kann beliebige Werte speichern.
ArrayList<Integer> list = new ArrayList<Integer>();
Erstelle eine ArrayList-Variable namens list.
Weise ihr ein ArrayList-Objekt zu.
Diese Liste kann nur Integer- und int-Werte speichern.

„Klingt total interessant. Vor allem der Teil über das Speichern von beliebigen Typen.“

„Es sieht nur so aus, als wäre das eine gute Sache. In Wirklichkeit ist es so: Wenn wir Zeichenketten in EINER Methode in eine ArrayList einfügen und dann in einer ANDEREN Methode erwarten, dass sie Zahlen enthält, wird das Programm abstürzen (mit einem Fehler enden).“

„Ach so.“

„Im Moment werden wir keine eigenen Klassen mit Typparametern erstellen. Wir verwenden einfach die vorhandenen.“

„Kann jede Klasse ein Typparameter sein, sogar eine, die ich selbst schreibe?“

„Ja. Jeder Typ außer primitiven Typen. Alle Typparameter müssen von der Object-Klasse erben.“

Du meinst, ich kann nicht ArrayList<int>? schreiben?“

„Genau, das kannst du nicht. Aber Java-Entwickler haben Wrapper-Klassen für jeden der primitiven Typen geschrieben. Diese Klassen erben von Object. Das sieht dann so aus:“

Primitiver Typ Klasse Liste
int Integer ArrayList<Integer>
double Double ArrayList<Double>
boolean Boolean ArrayList<Boolean>
char Character ArrayList<Character>
byte Byte ArrayList<Byte>

„Du kannst primitive Klassen und ihre entsprechenden Wrapper-Klassen einfach einander zuordnen:“

Beispiele
int a = 5;
Integer b = a;
int c = b;
Character c = 'c';  //the literal c is a char
char d = c;
Byte b = (byte) 77;  // The literal 77 is an int
Boolean isOk = true;  // the literal true is a boolean
Double d = 1.0d;  // The literal 1.0d is a double

„Prima. Ich glaube, ich werde versuchen, ArrayList öfter zu benutzen.“