Cast Object vers ArrayList<String> java1.5

Signaler
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
-
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
-
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

6 réponses

Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
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)

GL

GodConan ;o)
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
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>
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
97
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 ..."

OoWORAoO
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
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)
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
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

Merci quand même les gens ++
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
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é

GodConan ;o)