Generischer Typ
Generische Typen sind Typparameter.
In der Programmiersprache Ada werden sie zur Parametrierung von Paketen eingesetzt.
In neuen Versionen der Programmiersprache Java heißen sie Generics und dienen dazu, Klassen mit zu verwendenden Typen zu parametrieren. Damit werden der Sprache Möglichkeiten ähnlich zu Templates in C++ eröffnet. Generische Typen werden mit Ausgabe 1.5 ("Tiger") 2004 in die Sprache aufgenommen.
Beispiel in Java:
Ein Programm möchte eine ArrayList
verwenden, um eine Liste von JButton
s zu speichern.
Bisher war die ArrayList auf den Typ Object fixiert:
ArrayList al = new ArrayList(); al.add(new JButton("Button 1")); al.add(new JButton("Button 2")); al.add(new JButton("Button 3")); al.add(new JButton("Button 4")); al.add(new JButton("Button 5")); for (int i = 0; i < al.length; i++) { ((JButton) al.get(i)).setBackground(Color.white); }
Man beachte die notwendige explizite Typumwandlung ("Cast") sowie die Typunsicherheit, die damit verbunden ist. Man könnte versehentlich etwas anderes als JButton
s in der ArrayList
speichern, der Compiler würde das nicht verhindern, erst zur Laufzeit erhielte man durch die explizite Typumwandlung von JButton
eine ClassCastException
.
Mit generischen Typen geht in Java zukünftig:
ArrayList<JButton> al = new ArrayList<JButton>(); al.add(new JButton("Button 1")); al.add(new JButton("Button 2")); al.add(new JButton("Button 3")); al.add(new JButton("Button 4")); al.add(new JButton("Button 5")); for (int i = 0; i < al.length; i++) { al.get(i).setBackground(Color.white); }
Beim Auslesen ist nun keine explizite Typumwandlung mehr notwendig, beim Speichern ist es nur noch möglich, JButtons in der ArrayList
al abzulegen.
Interessant ist dann auch noch die Kombination von generischen Typen mit den verbesserten For-Schleifen. Obiges Beispiel lässt sich somit kurz fassen:
ArrayList<JButton> al = new ArrayList<JButton>(); al.add(new JButton("Button 1")); al.add(new JButton("Button 2")); al.add(new JButton("Button 3")); al.add(new JButton("Button 4")); al.add(new JButton("Button 5")); for (JButton b : al) { b.setBackground(Color.white); }