Classe avec généricité n'accepte pas les int
delfre56
Messages postés
404
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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 :
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 :)
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
-
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 unthrow new IllegalArgumentException
dans ta méthode privée si derrière tu fais untry catch
dans le constructeur...
Laisse cette exception, mais enlèves le try/catch, ainsi que lesthrows Exception
(on ne devrait jamais avoir ce genre de throws...)
La confiance n'exclut pas le contrôle -
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