Maison  >  Article  >  Java  >  Pourquoi ne puis-je pas créer un tableau de génériques en Java ?

Pourquoi ne puis-je pas créer un tableau de génériques en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 23:14:29114parcourir

Why Can't I Create an Array of Generics in Java?

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!

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