Maison > Java > javaDidacticiel > Pourquoi ne puis-je pas ajouter une instance « parent » à une « liste »

Pourquoi ne puis-je pas ajouter une instance « parent » à une « liste »

Barbara Streisand
Libérer: 2024-11-30 19:34:11
original
995 Les gens l'ont consulté

Why Can't I Add a `Parent` Instance to a `List

Complications des types génériques génériques

Les génériques génériques Java fournissent un moyen de représenter les types sans s'engager sur un type concret spécifique. Bien que cette flexibilité puisse être puissante, elle peut également conduire à un comportement inattendu.

Considérons l'exemple suivant, où une liste Java d'un sous-type inconnu de l'interface Parent est définie :

List<? extends Parent> list = ...;
Copier après la connexion

Le système de types de Java ne permettra cependant pas d'ajouter une instance Parent à cette liste :

Parent p = factory.get();   // returns concrete implementation
list.set(0, p);   // compilation error
Copier après la connexion

Cette apparente contradiction découle du concept de sécurité des types. Autoriser l’ajout d’une instance Parent à la liste compromettrait l’intégrité du type générique générique. Voici pourquoi :

Imaginez si cet ajout était autorisé. Supposons que nous ayons une liste d'instances Child, qui sont un sous-type concret de Parent :

List<Child> childList = new ArrayList<Child>();
childList.add(new Child());
Copier après la connexion

Si nous devions attribuer cette childList à notre liste avec le type générique générique, il semblerait que nous ayons une liste d'instances Parent :

List<? extends Parent> parentList = childList;
Copier après la connexion

Cependant, nous pourrions alors potentiellement ajouter une instance Parent à cette parentList :

parentList.set(0, new Parent());
Copier après la connexion

Cela permettrait provoquer une violation de sécurité de type catastrophique. Lors de la récupération ultérieure de l'élément à l'index 0 de la childList, nous nous attendrions à ce qu'il s'agisse d'une instance Child, mais il s'agirait en fait d'une instance Parent, ce qui entraînerait un comportement inattendu.

Pour éviter cette violation de sécurité de type, Java applique la règle selon laquelle vous ne pouvez ajouter que des instances du type générique générique lui-même à la liste, même si vous pouvez récupérer des instances de son supertype. Cette restriction garantit l'intégrité du paramètre de type et évite les bugs potentiels.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal