Generics Teil 1: Einführung
Vor kurzem wurde ich nach dem Sinn bzw. dem Einsatzzweck von <? super E> gefragt.
Bevor ich die Frage hier im Blog nochmals beantworte, kurz noch eine ganz kleine Einführung in Generics
Mit dem JDK 5.0 kamen die sogenannten Generics, mit denen Klassen und Methoden zusätzlich
parametisiert werden können (Ähnlich wie die Templates in C++, mit dem Unterschied, dass keine
neuen Klassen pro Parametertyp erstellt werden). Ziel der Generics ist die Lesbarkeit des Codes zu erhöhen und explizite Casts zu reduzieren. Allerdings kann die Verwendung von Generics auch sehr tückisch werden. Aber fangen wir mal einfach an (also ohne Generics):
Der folgende Codeausschnitt wird kompiliert und erzeugt zur Laufzeit eine ClassCastException. Unschön.
Ungefährlicher ist Codeausschnitt 2, da hier schon der Compiler den Fehler meldet:
Mit der Verwendung der Generics wird die ArrayListe parametisiert und erlaubt nur das Hinzufügen
von Integer Objekten. Der Compiler unterbindet den fehlerhaften Aufruf und verhindert unliebsame
Überraschungen zur Laufzeit. Schön.
Morgen gibts schon weiter mit Teil 2: Wildcards. Da wirds etwas kniffliger.
September 3rd, 2006 at 1:52 am
Schön, dass du das Thema aufgreifst, und danke für die Antwort-Mail
September 3rd, 2006 at 5:58 pm
Gern geschehen
. Ich wünsche euch viel Erfolg bei den Prüfungen.
February 28th, 2008 at 10:33 pm
Sollte es anstelle von…
ArrayList intList = new ArrayList();
…nicht…
ArrayList intList = new ArrayList();
heißen?
February 29th, 2008 at 8:05 am
hallo beginner. ich glaube du meinst
ArrayList<Integer> intList = new ArrayList()<Integer>
anstelle von
ArrayList<Integer> intList = new ArrayList();
(Spitze Klammern werden von Wordpress gefiltert)
Beides funktioniert, oberes ist etwas schöner, da der Compiler keine Warnung zurückgibt.