Maison >Java >javaDidacticiel >Pourquoi ne puis-je pas ajouter de données à une liste

Pourquoi ne puis-je pas ajouter de données à une liste

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 10:46:39223parcourir

Why Can't I Add Data to a `List

Ajout de données à la liste

Le dilemme rencontré lors de la tentative d'ajout d'éléments à une liste 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&gt(); 

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 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 :

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>());

En conclusion, ajouter des données à List n'est pas possible en raison de l'incertitude quant au type de la liste sous-jacente, lors de la lecture de List 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn