Generic Vector in Java
Warum nicht die add () - Methode hier zusammenstellen?
Vector<?> vectorList[] = new Vector<?>[10];
vectorList[0].add("elem1");
Dank
- In diesen Fällen ist es normalerweise am besten, um post zu der compiler-Fehlermeldung. Da du nicht geschrieben die Java-boiler plate, können wir nicht garantieren, was der genaue Fehler ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es mehrere Probleme mit Ihrem code. Erstens, die Elemente des array noch nicht initialisiert sind, und so werden Sie hinzufügen, um eine nicht vorhandene Vektor. Und, zweitens, indem zu einer generischen container, wo der Typ ist ein Platzhalter, ist nicht sinnvoll, denn es könnte sein beschränkt sich auf eine mehr begrenzte Art, und so hinzufügen würde, nicht sicher sein.
Können Sie lösen das erste problem, indem Sie Ihre array:
Nun, Sie haben gesehen, dass es gefüllt werden kann mit Vektoren, die nicht akzeptieren Typ String, können Sie sehen, warum die add-Anweisung würden in der Folge scheitern. Sie können das Problem beheben, dass durch die Bindung an einen bestimmten Typ (z.B. String) früher.
Sehen Java Generics: Wildcards aus dem Java-tutorial für weitere Informationen.
BEARBEITEN
Es scheint, ich bin bezweifelte, und so habe ich die folgenden komplett, kompilierbare Beispiel:
Kompilieren mit
javac Main.java
gibt keine Kompilierungsfehler.Es nicht kompilieren, da
vectorList[0]
ist der TypVector<?>
, und Sie können nicht nennenadd(T)
auf ein wildcard-Sammlung. Sie können nicht nennenadd(T)
denn man kann nicht gewährleisten, dass das element, das Sie hinzufügen, ist von der (unbekannten) TypvectorList[0]
enthält.Die Lektion ist hier, dass generische Typen und arrays nicht gut zusammen zu spielen. Das heißt, Sie können nicht machen
vectorList
TypVector<String>[]
ohne eine unchecked cast, TypVector[]
geben Sie ein raw-Typ zu behandeln, und Sie können nicht tun, was Sie wollen mit einemVector<?>[]
(die einzige, die doen nicht produzieren eine Warnung). Verwenden Sie stattdessen einigeList<Vector<String>>
.Weil Sie zu instanziieren jedes Vektors in das array, nicht nur das array selbst