Ich habe eine Java-Frage zu Generika. Ich erklärte eine generische Liste:Liste <? erweitert MyType>
List<? extends MyType> listOfMyType;
Dann in irgendeiner Methode, die ich instanziiert versuchen und fügen Sie Artikel zu dieser Liste:
listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance);
Wo myTypeInstance
nur ein Objekt vom Typ ist MyType
; Es wird nicht kompiliert. Dort heißt es:
Die Methode add in der Liste Typ < Capture # 3-of (? Capture # 3-of MyType erstreckt)? erstreckt MyType> Jede Idee
ist? nicht anwendbar für die Argumente (MyType)
Als Josh Bloch sagt: "PECS Denken Sie daran: Der Produzent Verlängert, Consumer ist super." Da listOfMyType ein Consumer ist (Sie fügen ihn hinzu), ist "super" gültig und "extends" nicht. –
Links sind jetzt gebrochen. –
Punkt der Pedanterie: Sie können mit "extends" "null" setzen ".Außerdem können Sie den Typ erfassen und "Referenzen" hinzufügen, die Sie zuvor "bekommen" haben. –