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
Barbara Streisandoriginal
2024-11-03 23:16:31668parcourir

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>

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>

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>

Ou utiliser une liste de listes :

<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>(); // No error</code>

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!

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