Zum Inhalt springen

Generischer Typ

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 27. Juli 2004 um 21:16 Uhr durch 80.142.15.118 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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 JButtons 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 JButtons 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);
}