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

Fermé
delfre56 Messages postés 340 Date d'inscription mardi 3 juillet 2012 Statut Membre Dernière intervention 23 février 2018 - 12 févr. 2016 à 15:37
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 12 févr. 2016 à 19:15
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 12/02/2016 à 19:45
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
12 févr. 2016 à 18:13
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