Comment contourner l'interdiction des tableaux génériques dans une classe générique ?
Object[] et en castant chaque élément lors de la lecture avec (E) tableau[i]Savoir contourner l'interdiction des tableaux génériques en Java en utilisant un Object[] avec cast à la lecture.
Savoir contourner l'interdiction des tableaux génériques en Java en utilisant un Object[] avec cast à la lecture.
Java interdit new E[n] dans une classe générique pour des raisons liées à l'effacement de types ; on utilise new Object[n] à la place et on caste en E à chaque lecture de tableau.
Object[] : Object[] t = new Object[taille]; — au lieu de E[] t = new E[taille]; (interdit).t[i] = element;E val = (E) t[i];Implémenter une classe générique Pile<E> qui stocke ses éléments dans un tableau interne.
Object[] : Object[] t = new Object[taille]; — au lieu de E[] t = new E[taille]; (interdit).Déclarer le tableau interne en Object[] pour contourner l'interdiction.
class Pile<E> {
private Object[] elements; // pas E[]
private int taille;
Pile(int capacite) {
elements = new Object[capacite]; // OK
taille = 0;
}
}
t[i] = element;Stocker les éléments sans cast lors de l'ajout.
void push(E e) {
elements[taille] = e; // stockage direct, pas de cast
taille++;
}
E val = (E) t[i];Caster lors de la lecture (pop).
E pop() {
E val = (E) elements[--taille]; // cast nécessaire
elements[taille] = null;
return val;
}
// Test
Pile<String> p = new Pile<>(5);
p.push("Alice");
p.push("Bob");
System.out.println(p.pop()); // Bob
Object[] stocke les éléments ; le cast (E) t[i] les récupère avec le bon type.
Classe générique File<E> avec Object[] interne : push et peek.
Montrer que E[] t = new E[50] provoque une erreur et expliquer la solution avec Object[].
Crée ton compte gratuit pour accéder à la fiche et aux exercices