Erste Schritte Tippfehler?

babuschka

Top Contributor
Hallo,

in meinem Buch "Java 7 für Dummies" geht es gerade um Collections und generische Typen und den sog. "Diamond operator" - toller Name, so vielsagend...
Egal. In einem grauen Kasten (Info) wird da der alte Code (ohne diesen) dargestellt, wenn eine ArrayList in eine andere verschachtelt wird:
Java:
ArrayList<ArrayList<String>[]> mess = new ArrayList<ArrayList<String[]>();

Der Unterschied bei der neuen Variante des Codes mit diesem Operator ist klar, da muss ich halt auf der rechten Seite vom "=" nicht mehr <ArrayList<String> schreiben.

Was mich verwirrt, ist vielmehr der Umstand, daß hier - scheinbar entgegen den allgemeinen Konventionen - zwei spitze Klammern auf- und nur eine zugemacht werden.

Kann mir jemand hier erklären, warum das so ist?
Danke!
Gruß,

Javaswillerdenn
 

Fab1

Top Contributor
Java:
ArrayList<ArrayList<String>[]> mess = new ArrayList<ArrayList<String[]>();

Diese Zeile sollte dir eigentlich einen Compilerfehler liefern oder auf was willst du hinaus?
 

babuschka

Top Contributor
Hallo,

ich hab kein konkretes Codebeispiel, in dem diese Zeile vorkommt. Daher konnte ich es nicht ausprobieren - es steht nur so in meinem Buch und kam mir seltsam vor.

@ pl4gu33
Ich nehme an, mit "vorne" und "hinten" meinst Du "links bzw. rechts vom ="?
Dann ist mir der Teil links klar, da werden zwei spitze Klammern aufgemacht und auch zwei zugemacht. Rechts ist bei Dir aber das gleiche wie in meinem Buch, da werden zwei aufgemacht, aber nur eine zugemacht. Wie funktioniert das?

Gruß,

Javaswillerdenn
 
G

Gast2

Gast
Das war nur der Fehler auf den er dich aufmerksam machen wollte. Wo zwei Klammern aufgeben müssen auch immer zwei zugehen.

Java:
List<List<String>> listOfStringLists = new ArrayList<List<String>>();
 

Fab1

Top Contributor
Am einfachsten wäre, wenn du diese Deklaration einfach mal in deinen Editor kopierst und selbst dran rumprobierst. Die Deklaration hat ja keinerlei Abhängigkeiten somit sollte auch kein Fehler auftreten.

Ich denke er hat nur den ">" Operator vergessen. Der gehört da nämlich hin. Was plague ja auch bei "1." geschrieben hat.
 
H

hüteüberhüte

Gast
In deiner Lektüre ist ein Tippfehler:

Entweder:
Code:
ArrayList<ArrayList<String>[]> mess = new ArrayList<ArrayList<String>[]>();
oder (weil "Diamond"):
Code:
ArrayList<ArrayList<String>[]> mess = new ArrayList();
 
H

hubbaBubba

Gast
Ohne der schließenden Klammer wäre nicht mehr eindeutig bestimmt, ob es sich nun um ein Array von ArrayLists mit Strings oder um eine ArrayList mit Arrays von Strings handelt. Auch deswegen kann so etwas nicht funktionieren.
 

babuschka

Top Contributor
Hallo hüteüberhüte,

Danke! Das ist die klare Antwort, die ich gesucht hab - als Neuling in Java war ich mir nicht ganz sicher, obwohl ich aus den Skriptsprachen, die ich kann, das Prinzip der Klammerung kenne.
Gut, es ist ein Tippfehler. Ich hab grad eine email geschrieben für die nächste Ausgabe, denn das Buch ist ja gerade für absolute Neulinge wie mich geschrieben und so was ist sowohl verwirrend als auch zeitraubend, wenn man eine Antwort sucht.
Gruß,

Javaswillerdenn
 

Neue Themen


Oben