Tableaux génériques en Java
En Java, les génériques et les tableaux ne coexistent pas directement. Lorsque vous tentez de créer un tableau de génériques qui étendent un type comparable, une erreur peut survenir. La raison fondamentale en est que les génériques Java sont effacés lors de la compilation.
Considérez le code suivant :
<code class="java">public class Hash<T extends Comparable<String>> { private T[] hashTable; private int tableSize; Hash(int records, double load) { tableSize = (int)(records / loadFactor); tableSize = findNextPrime(tableSize); hashTable = (T[])(new Object[tableSize]); // Error: Object cannot be cast to Comparable } }</code>
L'effacement de type de Java traite les tableaux comme covariants, ce qui signifie qu'ils conservent le type de leurs éléments. au moment de l'exécution. Par conséquent, un tableau d'un type générique n'est pas du même type qu'un tableau de son type comparable, et ce dernier ne peut pas être converti en premier.
Pour contourner ce problème, une solution de contournement consiste à utiliser Array.newInstance ():
<code class="java">private Comparable[] hashtable; ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
Cependant, cette approche a des limites. Le code hérité, les bibliothèques externes ou l'interopérabilité avec d'autres langages peuvent nécessiter de véritables tableaux génériques.
En fin de compte, il est généralement recommandé d'éviter d'utiliser des tableaux avec des génériques en Java. Envisagez plutôt d'utiliser des classes de collection comme ArrayList ou HashMap, qui offrent plus de flexibilité et de sécurité de type.
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!