Java 1.6: Erstellen eines Arrays aus List & lt; T & gt;
Warum kann ich nicht erstellen Sie ein array mit der Liste ?
List<String>[] nav = new List<String>[] { new ArrayList<String>() };
Eclipse sagt "Cannot create a generic array of Liste"
oder
ArrayList<String>[] nav = new ArrayList<String>[] { new ArrayList<String>() };
Eclipse sagt "Cannot create a generic array von ArrayList"
oder
List<String>[] getListsOfStrings() {
List<String> groupA = new ArrayList<String>();
List<String> groupB = new ArrayList<String>();
return new List<String>[] { groupA, groupB };
}
Aber ich kann dies tun:
List[] getLists() {
return new List[] { new ArrayList(), new ArrayList() };
}
Eclipse sagt, dass List und ArrayList sind raw-Typen aber es kompiliert...
Scheint ziemlich einfach, nicht warum es funktioniert?
InformationsquelleAutor der Frage Mike | 2011-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, generics-tutorial geben die Antwort auf Ihre Frage.
InformationsquelleAutor der Antwort Gursel Koca
Können keine arrays von generischen Typen, die in der Regel.
Der Grund dafür ist, dass die JVM hat keine Möglichkeit zu überprüfen, dass nur die richtigen Objekte in es (mit ArrayStoreExceptions), da die Differenz zwischen
List<String>
undList<Integer>
sind nicht-existent zur Laufzeit.Natürlich können Sie trick, dem compiler durch die Verwendung des raw-Typ
List
oder die ungebundenen Platzhalter-TypList<?>
und dann warf es (mit einer unchecked cast)List<String>
. Aber dann ist es Ihre Verantwortung, die zu tragen nurList<String>
im es und keine anderen Listen.InformationsquelleAutor der Antwort Paŭlo Ebermann
Keine genaue Antwort, aber einen Tipp:
Letzte Beispiel hat eine rohe Art Warnung, weil Sie die weggelassen typization der Liste; es ist im Allgemeinen eine bessere (sichere Typ -) Ansatz, um festzulegen, welche Objekttypen sind in der Liste enthalten, die Sie schon in den vorherigen Beispielen (
List<String>
stattList
).Verwendung von arrays ist nicht das beste, da Ihre Verwendung enthält Fehler, die die meisten Zeiten; die Verwendung von Collection-Klassen (List, Set, Map,...) ermöglicht den Einsatz von typization und praktische Methoden für den Umgang mit Ihrem Inhalt; nehmen Sie nur einen Blick auf die statischen Methoden der Klasse Sammlungen.
Also, nutzen Sie einfach das Beispiel von der vorherigen Antwort.
InformationsquelleAutor der Antwort Andreas
Andere Lösung ist die Verlängerung
LinkedList<String>
(oderArrayList<String>
usw.), dann erstellen Sie ein array von der Unterklasse.InformationsquelleAutor der Antwort Chris