Classe avec généricité n'accepte pas les int

delfre56 Messages postés 350 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
j'essaie, pour un cours de java, de créer une classe ArrayCollection en utilisant la généricité. Le but est de pouvoir créer des tableaux de tous types. Voilà (une partie de) mon code :


public class ArrayCollection<E> implements collection.OrderedCollection<E> {
    /**
     * Taille du tableau
     */
    int size;
    
    /**
     * Tableau
     */
    E array[];
    
    /**
     * Constructeur
     * @param int size la taille du tableau
     */
    public ArrayCollection(int size) throws Exception{
        this.size = size;
        try{
            array = newArray(size);
        }catch (IllegalArgumentException e){
            System.out.println("Erreur lors de la création du tableau");
        }
    }
    
    /**
     * Crée un nouveau tableau
     * @param size taille du tableau
     * @return Un tableau d'éléments de type E
     */
    @SuppressWarnings("unchecked")
    private E[] newArray(int size) throws Exception{
        if(size<=0) {
            throw new IllegalArgumentException("size("+size+")<=0");
        }
        return (E[])(new Object[size]);
    }

Sauf que quand j'essaie de l'instancier avec comme type int, ça ne fonctionne pas : "unexpected type recquired : reference found : int"

Voilà, je galère là dessus et je ne peux pas avancer plus loin sans avoir résolu ça. Merci de m'aider :)

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Comme indiqué par Dafalb, les types génériques doivent forcément être des objets. Il faut donc utiliser Integer à la place de int.

De plus ceci ne fonctionnera pas :
(E[])(new Object[size]);

Tu peux éventuellement caster un Object en E, mais ça ne fonctionne pas avec les tableaux.

Enfin, il n'y a pas d'intérêt à faire un
throw new IllegalArgumentException
dans ta méthode privée si derrière tu fais un
try catch
dans le constructeur...
Laisse cette exception, mais enlèves le try/catch, ainsi que les
throws Exception
(on ne devrait jamais avoir ce genre de throws...)
La confiance n'exclut pas le contrôle
1
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,

On ne peut pas en Java avoir un tableau générique d'int
Ils doivent être 'boxed', on doit utiliser les Integer qui sont des objets
0