Whouzuo: 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?)

Afaik meinen Signaturien die... Eigenschaften von Funktionen (Parameter).

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.

Aber ich kann doch später irgendwann myList = new ...; machen und dann eben später doch ArrayLists reinstopfen. Jedenfalls rein logisch, das sollte keine Laufzeitfehler geben können imho.

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

Wie nennt man diese Syntax? Das "?" steht also für eine anonyme Klasse sozusagen?

Danke auf jedenfall schonmal. =)