Bonjour,
j'ai un objet en Java qui me retourne une 'Enumeration', comment s'en servir ?
http://img11.hostingpics.net/pics/351598enum.png
Sous Eclipse j'ai systématiquement des warnings, je ne parviens pas à récupérer proprement les données.
Merci.
Version imprimable
Bonjour,
j'ai un objet en Java qui me retourne une 'Enumeration', comment s'en servir ?
http://img11.hostingpics.net/pics/351598enum.png
Sous Eclipse j'ai systématiquement des warnings, je ne parviens pas à récupérer proprement les données.
Merci.
Montre-nous ton code... et précise-nous quel warning (parce qu'on ne voit pas grand chose sur ta copie d'écran).Code:
1
2
3
4
5
6
7 Vector<String> v = ... // exemple d'objet avec une méthode qui retourne une Enumeration for (Enumeration<String> e = v.elements(); e.hasMoreElements();) { String string = e.nextElement(); // récupération de l'élément }
NB : à part avec des vieilles classes qui ont ce type de méthode et pas d'alternative, l'Enumeration n'étant pas super pratique préférer, si elles existent, ses alternatives de type Iterator, ou, mieux, Stream en Java 8.
Deux solutions pour le warning mais comme l'a dit joel, sans le warning on peut pas savoir donc c'est pifométrique :
- Ta méthode est dépréciée (je n'y crois pas de trop, mais pourquoi pas)
- Tu n'as pas typée ton Enumeration (Enumeration<String> ou Enumeration<TonType>, etc)
Plus d'informations seraient bien venues !
j'ai le même soucis que ici :
https://community.oracle.com/thread/1184920
j'ai corrigé avec le '?', mais ça me plaît moyennement ;)
Ce n'est pas vraiment la réponse à ma question. Et je ne pense pas qu'il s'agisse vraiment du "même souci" que dans le fil que tu cites, qui parle d'un problème aussi peu précis d'ailleurs que le tiens, mais dont on peut supposer (on est pas là pour faire des suppositions, mais bon..;) qu'il s'agit d'un appel à la méthode getParameterNames () de la classe HttpServletRequest sur une très ancienne version de l'API, pour laquelle cette méthode a une signature du type :
Alors que sur les API plus récentes on a justement :Code:java.util.Enumeration getParameterNames()
La différence est que dans le second cas, l'Enumeration est paramétrée et on peut écrire :Code:java.util.Enumeration<java.lang.String> getParameterNames()
, alors que dans le premier cas, elle ne l'est pas, et donc on est obligé de caster dans ce qu'on pense que c'est (ou même qu'on est sûr que c'est en ayant consulté doc et/ou source). Mais dans ce dernier cas, le compilateur dit "ouais, toi, tu me dis que c'est de l'Enumeration<String> mais moi je ne peux pas en être sûr, donc je t'alerte sur le fait que ça pourrait planter". Maintenant tu as le choix en laissant le warning, ou en ajoutant une annotation (@SuppressWarnings("unchecked")) pour dire au compilateur "je sais ce que je fais, donc ton alerte, tu peux la supprimer), ou caster en Enumeration<?> qui dit,"bah puisqu'on ne sait pas ce que c'est, alors je dis que c'est une Enumeration de je ne sais pas ce que c'est". Dans l'exemple de la réponse, on précise qu'on peut récupérer les noms de paramètres par la méthode toString() qui existent sur toutes les classes, donc qui marchera mais pour une classe qu'on sait pas ce que c'est.Code:Enumeration<String> enumeration = request.getParameterNames();
Maintenant les questions à se poser :
- pourquoi tu as une méthode qui te retourne du Enumeration non paramétré ?
- Pourquoi tu passes par une Enumeration ?
Pour la première question, la réponse peut-être :
- L'API utilisée est ancienne
- Dans ce cas passer par une API plus récente (préférable)
- Ou, à défaut, utiliser une des solutions précitées
- La méthode est faite maison dans une classe à toi, ou à un collègue
- Dans ce cas corriger la méthode pour paramétrer le type (préférable)
Pour la seconde, si la réponse est "c'est le seul moyen" (sous entendu, je ne peux modifier le code de la méthode qui retourne de l'Enumeration, et je n'ai pas d'autres méthodes pour récupérer ce que je veux), bah lire ci-dessus. Pour toutes autres réponses : utiliser dans ce cas, les alternatives paramétrées, du type Iterator, ou Stream.
Effectivement j'ai pas le choix, ce n'est pas mon code.
J'essaye de faire au plus propre. Peut-être que le @SuppressWarnings est mieux finalement.
En tout cas Merci. ;)