bubble: Verschachtelte Generics

Beitrag lesen

List<List<String>> myList = new Vector<Vector<String>>();
Da meckert aber der Compiler. Folgendes funktioniert:
List<Vector<String>> mylist = new Vector<Vector<String>>();
Jetzt frage ich mich, warum ersteres nicht geht.

Weil die Signaturen verschieden sind (iirc, nannte man dieses Typgedöhns Signaturen, oder waren das die Definitionen von Funktionen?)

List<List<String>> würde bedeuten, dass man jegliche Instanzen dessen Klassen vom Typ List erben und String "verwenden" akzeptieren würde (Du könntest zB. ArrayList<String>- und Vector<String>-Instanzen reinstopfen). Durch Vector<Vector<String>> geht das aber nicht mehr, da ArrayList<String> halt kein Vector<String> ist.

Trotzdem ist das was du willst möglich:
List<? extends List<String>> myList = new Vector<Vector<String>>();

Trotzdem bleibt new Vector<List<String>>() sinnvoller, da man nicht extra aufpassen muss was nun wirklich instanziert wurde.

MfG
bubble

--
If "god" had intended us to drink beer, he would have given us stomachs. - David Daye