| 

.NET C# Java Javascript Exception

5
ich weiß das man eine Liste mit

ArrayList<String> list = new ArrayList<String>()

erstellt. offensichtlich bedeutet das <String>, dass die Liste aus strings bestehen soll. es funktioniert aber auch, wenn ich es weglasse. warum soll man es dann machen?
News:
12.10.2009
moby-dick 101 1 3
3 Antworten
11
Wie du bereits richtig erkannt hast ist eine ArrayList<String>() eine Liste von Strings. Du bekommst damit eine so genannte typisierte Liste.

ArrayList<String> list = new ArrayList<String>() //typisierte Liste vom Typ String
ArrayList<MyObject> list = new ArrayList<MyObject>() //typisierte Liste vom Typ MyObject
ArrayList list = new ArrayList() //untypisierte Liste
ArrayList<Object> list = new ArrayList<Object>() //untypisierte Liste


Beispiel 1 und 2 ergeben eine typisierte Liste. Das heißt du kannst nur Elemente des selben Typs in ihnen speichern. Beispiel 3 und 4 sind untypisierte Listen. Du kannst in ihnen jedes beliebige Objekt speichern.

Welche der beiden Varianten man wählt ist ganz vom Anwendungsfall abhängig. In der Regel sind typisierte Listen empfehlenswert, da man hier bei der Verarbeitung der Liste sich nur auf einen Typ bzw. ein implementiertes Interface beschrenken braucht. Untypisierte Listen sind immer dann notwendig man man mehrer Objekte verschiedenen Typs in einer Liste speichern muss.
12.10.2009
Floyd 14,6k 3 9
2
Untypisierte Listen sollte man am besten garnicht verwenden! Wenn unterschiedliche Objekte in einer Liste gespeichert werden, solltest du überlegen ob das nicht ein Designfehler ist und diese nicht eigentlich vom selben Typ ableiten sollten.
toko 13.10.2009
1
Toko hat recht. In den meißten Fällen lassen sich untypisierte Listen vermeiden.
Floyd 13.10.2009
3
Zusätzlich zu Floyds sehr guter Antwort könnte folgender Link für dich noch interessant sein:
http://www.angelikalanger.com/Articles/JavaMagazin/Generics/GenericsPart1.html

Hier werden Java Generics (so der Name dieses Features) näher erklärt.
13.10.2009
codemurai 109 2
3
Abgesehen von der Typsicherheit, sollte man vielleicht noch erwähnen, dass bei typisierten Listen das Casten beim Entnehmen eines Elements entfällt, was etwas Schreibarbeit erspart. Zudem wird man etwa in Eclipse auch gleich auf eventuell falsche Zuweisungen hingewiesen.
Der Compiler entfernt die Typisierung im Übrigen wieder, so dass der Bytecode bei beiden Varianten gleich aussieht.
13.10.2009
jenser78 131 1 2
1
Stimmt nicht ganz, denn man kann den Typ per Reflection
auslesen. Wird zum Beispiel von Persistenz Frameworks genutzt, um Konfigurationsarbeit zu vermeiden.
keinhaar 13.10.2009
1
Welchen Typ kann ich per Reflection auslesen? Denn Typ der Liste oder den Typ eines Elements in der Liste? Soweit ich weiß, nutz Java ab 1.5 "Type Erasure", so dass nach dem Übersetzen eine typisierte Liste nicht mehr von einer untypisierten Liste zu unterscheiden ist. Der Compiler fügt sogar die entsprechenden Casts ein. Ein Decompiler kann das leicht zeigen. In den erzeugten Class Files gibt es lediglich noch Signature-Attribute, welche Informationen zu den Typen enthalten, aber zur Laufzeit eigentlich nicht ausgewertet werden.
jenser78 14.10.2009

Stelle deine Java-Frage jetzt!