el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 2015
-
9 août 2007 à 12:34
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 2012
-
9 août 2007 à 20:27
Salut à tous,
voilà, je comprend pas vraiment (juste un peu en fait) les générics en java 1.5.
Contexte : je mets une ArrayList<String> dans ma session J2EE, et lorsque je souhaite la récupérer, getAttribute renvoyant un Object, il me faut la caster. (en tout cas, comme j'aurais fait en 1.4)
Code qui plante :
ArrayList<String> al = new ArrayList<String>();
al = (ArrayList<String>)request.getSession().getAttribute("attribut");
Le problème est qu'il me sort les erreurs suivantes :
1. si je cast en ArrayList tout court :
Type safety: The expression of type ArrayList needs unchecked conversion to conform to
ArrayList<String>
2. si je cast (tout logiquement) en ArrayList<String> :
Type safety: The cast from Object to ArrayList<String> is actually checking against the erased
type ArrayList
Qui m'est totalement incompréhensible, et inconnu au bataillon.
Avez-vous la solution pour réussier à récupérer mon arraylist de ma session ? Merci
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 9 août 2007 à 14:10
en gros ce qu il te dit c est que tu cast mais que tu n est pas sur d en avoir ... c est une warning ca non ? cela ne doit pas bloquer ton programme?
autrement il est difficile d analyser le problem ;o) ne sachant ce qu est 'request' et donc ne connaissant pas les possibilité de getAttribute ;o) ...
autrement l utilisation des typage de tableau est bien simpatique pour le parcour leur parcout ou la en utilisant la boucle for each tu n as plus besoin de caster les elements... ;o)
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 9 août 2007 à 14:19
slt,
et bien request est une requette http HttpServletRequest ;)
C'est bien un warning, mais la jsp plante à l'éxécution de ce morceau. Pourtant l'objet dont le nom d'attribut est 'attribut' dans l'exemple est bien un ArrayList<String>
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 9 août 2007 à 15:21
Salut,
si tu veux enlever le warning, il te suffit de rajouter @SuppressWarnings au dessus de la méthode qui lève le warning exemple :
[...]
@SuppressWarnings("unchecked")
public void toto() {
[...]
ArrayList<String> al = new ArrayList<String>();
al = (ArrayList<String>)request.getSession().getAttribute("attribut");
[...]
}
[...]
maintenant pour ce qui est du plantage... bah faut voir... tu as testé un truc genre :
[...]
@SuppressWarnings("unchecked")
public void toto() {
[...]
Object obj = request.getSession().getAttribute("attribut");
if(obj instanceof ArrayList) {
ArrayList<String> al = new ArrayList<String>();
al = (ArrayList<String>)obj;
[...]
} else
System.err.println("Instanceof failure : " + ((obj != null) ? obj.getClass() : "null"));
}
[...]
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 9 août 2007 à 16:50
es tu sur que c est bien l array qui est passé ??? et non pas une simple reference ?!! metrise tu tout le processus de sérialisation?!!! ;o) passer un tableau comple dans un flux presente certains risk ;o) .... attention
GL
GodConan ;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
el_teedee
Messages postés497Date d'inscriptionmercredi 7 juillet 2004StatutMembreDernière intervention13 juillet 20159 9 août 2007 à 17:00
Salut les gens merci pour vos réponses,
cependant, étant donné que je pars demain en vacances et qu'il faut que j'avance absolument un max ajourd'hui, j'ai laissé tombé les ArrayList générique et repris un bon vieux bout de code 1.4 :p
> Twinuts : (c'est dans une jsp et pas une classe) ouep, j'ai testé en entourant d'un try catch, mais j'ai pas réussi à avoir autre chose qu'une "JasperException" super !
> GodConan : oui je maitrise entièrement la sauvegarde dans la session, et je suis sur que c'est bien mon objet ArrayList que j'y met...
Voilà au final vers quoi je suis revenu :
List alTypeChoisis = new ArrayList();
alTypeChoisis = (List)request.getSession().getAttribute("attribut");
Avec ca, j'ai ni warnig, ni plantage.
> Twinuts : j'ai pas essayé le @SuppressWarnings, le concept me plaît pas trop :) j'aurais préféré comprendre la mécanique, mais là il s'avère que j'ai pas le temps
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 9 août 2007 à 20:27
t inquiete ;o) on en est tous la .... ;o) qd on a pas le temps ;o) on en reviend au bonne vielles soluces.... ;o) ;o) qui sont souvent meilleur en fait ;o)héhéhé