Maison >Java >javaDidacticiel >Pourquoi ne puis-je pas ajouter de données à une liste
Ajout de données à la liste extends Number>
Le dilemme rencontré lors de la tentative d'ajout d'éléments à une liste étend Nombre> découle de la contrainte de la déclaration générique. Dans une telle déclaration, la variable peut contenir n'importe quelle valeur d'une famille de types. Cela implique que les affectations suivantes sont valides :
List<? extends Number> foo3 = new ArrayList<Number>(); List<? extends Number> foo3 = new ArrayList<Integer>(); List<? extends Number> foo3 = new ArrayList<Double>();
Cependant, cette déclaration générique interdit l'ajout direct d'éléments à la liste, car le type spécifique de liste est inconnu. Par exemple, l'ajout d'un Integer à foo3 n'est pas autorisé car il pourrait potentiellement s'agir d'un ArrayList En revanche, la déclaration générique List super Numéro> permet l'ajout de Number ou de ses superclasses. À l’inverse, cela limite la récupération au type Number ou à ses sous-classes. Ce comportement découle de la garantie que les éléments ajoutés à la liste ne violeront pas son intégrité. Pour illustrer les implications pratiques, les appels suivants à Collections.copy() démontrent comment les caractères génériques permettent une flexibilité dans la copie de données entre des listes d'objets associés. types : En conclusion, ajouter des données à List étend Nombre> n'est pas possible en raison de l'incertitude quant au type de la liste sous-jacente, lors de la lecture de List super Numéro> est limité au type Number et à ses sous-classes. Les caractères génériques offrent une polyvalence dans la copie de données entre des listes de types associés, comme l'illustre Collections.copy(). Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!Collections.copy(new ArrayList<Number>(), new ArrayList<Number>());
Collections.copy(new ArrayList<Number>(), new ArrayList<Integer>());
Collections.copy(new ArrayList<Object>(), new ArrayList<Number>());
Collections.copy(new ArrayList<Object>(), new ArrayList<Double>());