Neue Folien sind online!

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Neue Folien sind online!
Hi,

seit gerade eben sind die Folien 14 und 15 online… vielleicht ganz hilfreich fuer Blatt 12, weil hier die Implementierungen eigentlich schon drin sein duerften…

Viel Spass!!! :smiley:


Kann mir jemand erklären was die folgende Notation bedeutet:

Collection<A>
Set<A>  usw.

Vielen Dank!

Generics
Früher haben die ganzen Containerklassen immer nur Object geschluckt.
Im Großen und Ganzen war das schon praktisch, weil a) alles von Object abgeleitet war und b) du so in diese Containerklassen alles reinstopfen konnest.

Und da kommt auch gleich der Nachteil:
Willst du ein Objekt aus der Klasse rausholen und es als das ursprüngliche betrachten, musstest du Casten.
Z.B. ListNode adam = (ListNode)myset.pop();

Mit Generics ist das Anders.
Hier kannst du angeben (das ) welchen Typ das Teil speichern soll.
Also in etwa so:

Set<ListNode> myset = new Set<ListNode>();
// einige Operationen später
ListNode adam = myset.pop();

Das lästige Casten entfällt also.


ok, super. das leuchtet ein!


Hm. Noch eine (dumme) Frage:
wenn ich generische Klassen/Methoden schreibe, warum kann ich dann keinen primiviten Datentyp bsp. int verwenden?

Was ist denn der eigentliche Unterschied zw. Integer und int ?


Integer ist eine Klasse, mit

Integer = new Integer(5);

legst du eine neues Objekt an. int dagegen ist nur der primitive Datentyp, der in Java einfach 32 bit lang ist. Java legt Objekte auf dem Heap ab, primitive Datentypen dagegen auf dem Stack. Zusammen mit der Tatsache, dass die primitiven Typen weniger Speicher brauchen, sind sie effizienter.
Für generics brauchst du afaik Objekte, deswegen gehts mit int nicht, sondern nur mit dem Wrapper Integer.


Du kannst keine primitiven Datentypen verwenden, weil Generics keine echten Templates sind.
Intern wird (imho) immer noch als Object abgespeichert. Diese Generics übernehmen sozusagend das Casten für dich.

Integer ist die Wrapperklasse zum int.


Die ganze Genericgeschichte ist überhaupt nur zur Compilezeit verfügbar, dabei wird ein sog. “Weaving” vorgenommen und schlussendlich ist zur Laufzeit nichts mehr davon zu sehen. Deshalb gibts da auch massig inhärente Probleme.