J'ai une question Java sur les génériques. Je déclarais une liste générique:Liste <? extends MyType>
List<? extends MyType> listOfMyType;
Puis, dans une méthode que j'essaie instancier et ajouter des éléments à cette liste:
listOfMyType = new ArrayList<MyType>();
listOfMyType.add(myTypeInstance);
Où myTypeInstance
est juste un objet de type MyType
; il ne compilera pas. Il dit:
La méthode add (? Capture # 3 de étend MyType) dans le type Liste < capture # 3 de ? extends MyType> n'est pas applicable pour les arguments (MyType)
Une idée?
Comme le dit Josh Bloch: "Souviens-toi PECS: Producteur Prolonge, la consommation super." Comme listOfMyType est un consommateur (que vous ajoutez), 'super' est valide et' extends' ne l'est pas. –
Les liens sont maintenant rompus. –
Point de pedantry: Vous pouvez 'mettre'' null' avec "extends".Vous pouvez également capturer le type et "mettre" les références que vous avez "obtenu". –