Tableaux génériques en Java : une plongée complète
Les tableaux Java et les génériques peuvent sembler incompatibles à première vue. Alors que les génériques permettent la sécurité et la flexibilité des types, les tableaux en Java sont intrinsèquement covariants, ce qui signifie qu'ils conservent le type exact de leurs éléments au moment de l'exécution. Cela pose un défi lorsque vous essayez de créer des tableaux de types génériques.
Considérez l'extrait de code suivant :
<code class="java">public class Hash<T extends Comparable<String>> { private T[] hashTable; // ... }</code>
Ce code tente de créer un tableau d'objets génériques qui étendent Comparable. Cependant, Java ne permet pas de convertir un tableau Object en un tableau d'un type paramétré, comme le montre le message d'erreur qui apparaît lors de la compilation :
java.lang.Object; cannot be cast to [Ljava.lang.Comparable;
Pour contourner ce problème, on peut utiliser le Array. Méthode newInstance() :
<code class="java">private Comparable[] hashtable; // ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
Cependant, cette approche ne crée toujours pas de tableau du type paramétré. Les tableaux en Java sont de type sécurisé au moment de l'exécution, ils ne peuvent donc pas être convertis en un autre type à volonté.
Les génériques en Java subissent un effacement de type, où les paramètres de type sont supprimés lors de la compilation. Cela garantit que les tableaux conservent leurs types d’éléments spécifiques, empêchant ainsi la conversion involontaire. De ce fait, il n'est pas possible de créer un tableau d'un type paramétré spécifique.
Dans ce cas particulier, il est recommandé d'utiliser ArrayList à la place des tableaux. Les ArrayLists offrent un dimensionnement dynamique, une prise en charge des génériques et sont plus adaptées à la plupart des scénarios.
Pour une explication détaillée de ce problème, reportez-vous à la FAQ Java Generics : https://docs.oracle.com/javase/7 /docs/technotes/guides/generics/faq.html#Puis-je créer un tableau dont le type de composant est un type paramétré en béton
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!