Type HashSet<E> should be parameterized

Résolu
hanachaabani Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
hanachaabani Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -
svp à chaque fois que je veux manipuler des objets avec la classe hashSet ca me genere ce warning :
"Type safety The method add(Object) belongs to the raw type HashSet. References to generic
type HashSet<E> should be parameterized :"
qui peux m'expliquer c quoi le soucis et merci d'avance

2 réponses

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

Un certain nombre de classes, en particulier avec les collections comme HashSet, sont construites avec un paramètre générique <E> qui précise le type que l'on manipule.

Exemple, si tu travailles avec des String, tu devrais faire :
HashSet<String> set = new HashSet<String>();

Avant Java 5 cette écriture n'existait pas, donc on peut ne rien mettre et on se retrouvera avec le même comportement qu'avant Java 5, c'est à dire qu'on manipule des Object. Mais comme on n'est plus en Java 5 depuis longtemps ça affichera un warning.

L'avantage des paramètres génériques <E> c'est qu'ils permettent de restreindre l'accès aux méthodes. Si tu regardes la documentation de HashSet<E> tu verras que des méthodes ont pour paramètre ou type de retour un objet e type E,
add(E e)
par exemple.
Si tu manipules un
HashSet<String>
tu ne pourras faire que des
add(String)
, ce qui permet lorsque tu parcoures les objets de l'ensemble de le manipuler directement comme un String. alors que par défaut le type sera des Object, tu pourrais donc ajouter et récupérer n'importe quel type sans savoir ce qu'ils sont, ce qui n'est pas très propre.
0
hanachaabani Messages postés 51 Date d'inscription   Statut Membre Dernière intervention  
 
ah j'ai bien compris merci bcp :)
0