Maison > Java > javaDidacticiel > Pourquoi la création d'un tableau de listes génériques en Java provoque-t-elle une erreur du compilateur ?

Pourquoi la création d'un tableau de listes génériques en Java provoque-t-elle une erreur du compilateur ?

Barbara Streisand
Libérer: 2024-11-03 23:16:31
original
655 Les gens l'ont consulté

Why Does Creating an Array of Generic Lists in Java Cause a Compiler Error?

Tableaux de listes génériques

En Java, l'utilisation de génériques et de tableaux peut poser des défis. Bien que certaines constructions puissent sembler valides, le compilateur peut soulever des objections.

Considérez l'exemple suivant :

<code class="java">ArrayList<Key> a = new ArrayList<Key>(); // Compiles without issue</code>
Copier après la connexion

Cependant, lorsque vous tentez de créer un tableau de listes génériques :

<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error</code>
Copier après la connexion

Cette erreur est due à un effacement de type. Pour le résoudre, on peut soit convertir le tableau comme suit :

<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>
Copier après la connexion

Ou utiliser une liste de listes :

<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>(); // No error</code>
Copier après la connexion

Pour comprendre la justification de ces observations, il est crucial de comprendre Le mécanisme d'effacement de type de Java. Lors de la compilation, les informations de type sont effacées pour les types génériques, les traitant ainsi comme leurs homologues bruts. En effet, les tableaux ne peuvent fonctionner qu'avec des types bruts.

Dans le premier exemple, ArrayList est effacé dans ArrayList, qui est un type brut valide. Cependant, dans le deuxième exemple, le compilateur rencontre un type brut ArrayList[], ce qui n'est pas autorisé. Le cast utilisé garantit que le type de composant du tableau résultant s'aligne sur le type défini.

L'approche de liste de listes élimine ces problèmes car ArrayList n'est pas un tableau et ne souffre donc pas des mêmes restrictions.

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