Les tableaux peuvent-ils contenir des éléments génériques ?
Les types et les tableaux génériques peuvent interagir différemment en Java. Considérez le code suivant :
ArrayList a = new ArrayList();
Ce code se compile avec succès, créant une ArrayList générique nommée a. Cependant, la compilation du code suivant ne parvient pas :
ArrayList[] a = new ArrayList[10];
Pourquoi est-ce ? Il semble que les tableaux et les génériques soient incompatibles. Pour comprendre cela, explorons l'effacement de type en Java.
Effacement de type : dans les coulisses
Lorsque Java compile, il effectue l'effacement de type, qui remplace les informations de type génériques par types bruts (Objet). Cela évite les erreurs telles que le placement d'une chaîne dans une liste d'entiers. Cependant, les tableaux nécessitent un type brut et les génériques ne peuvent pas être représentés comme des types bruts.
Résoudre le problème des tableaux
Pour créer un tableau d'éléments génériques, vous pouvez explicitement convertit le tableau en type souhaité :
ArrayList[] a = (ArrayList[]) new ArrayList[10];
Cette conversion indique au compilateur que le tableau doit être considéré comme un tableau de ArrayLists avec des éléments clés.
Liste des listes : l'exception
En Java, une liste de listes n'est pas considérée comme un tableau. Par conséquent, le code suivant est compilé sans transtypage :
ArrayList> b = new ArrayList>();
Cette distinction se produit car ArrayList est un type non-tableau.
Conclusion
Les tableaux et les types génériques ont des limites en Java en raison de l'effacement de type. Cependant, en convertissant explicitement les tableaux en type générique souhaité ou en utilisant des listes de listes, on peut naviguer dans ces limitations et utiliser efficacement les types génériques dans les deux contextes.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3