Problème de casting avec les ArrayList
Résolu/Fermé
Pumbaa
-
13 déc. 2007 à 12:02
ouechTonton Messages postés 13 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 13 novembre 2011 - 23 févr. 2011 à 15:52
ouechTonton Messages postés 13 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 13 novembre 2011 - 23 févr. 2011 à 15:52
A voir également:
- Problème de casting avec les ArrayList
- Casting la roue de la fortune - Forum Cinéma / Télé
- Arraylist<t> - Forum Java
- 123 casting avis - Forum Cinéma / Télé
- Participer au casting - Forum Cinéma / Télé
- Casting - Forum Cinéma / Télé
7 réponses
Pumbaa
Messages postés
15
Date d'inscription
jeudi 13 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2010
6
13 déc. 2007 à 20:49
13 déc. 2007 à 20:49
Je me permet un "up" ^^
ouechTonton
Messages postés
13
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
13 novembre 2011
1
23 févr. 2011 à 15:52
23 févr. 2011 à 15:52
J'ai trouvé ceci comme explication et solution : http://tutorials.jenkov.com/java-generics/wildcards.html
En résumé, il faut écrire ce genre de code, avec des wildcards "?" :
public void test( ArrayList<? extends ClasseMere> argument) {
//Ton code
}
pour appeler cette méthode :
ArrayList<ClasseFille> liste;
test(liste);
Je ne connaissais pas ces wildcards. Je ne sais pas ce que les puristes en pense... mais j'achète !
En résumé, il faut écrire ce genre de code, avec des wildcards "?" :
public void test( ArrayList<? extends ClasseMere> argument) {
//Ton code
}
pour appeler cette méthode :
ArrayList<ClasseFille> liste;
test(liste);
Je ne connaissais pas ces wildcards. Je ne sais pas ce que les puristes en pense... mais j'achète !
Pumbaa
Messages postés
15
Date d'inscription
jeudi 13 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2010
6
15 déc. 2007 à 11:13
15 déc. 2007 à 11:13
Il n'y a vraiment aucun génie qui n'aurait une idée ? :-s
C'est pour moi une abberation dans Java qui vient de me gêner également. Le problème est le suivant: Il est impossible de caster directement ArrayList<B> vers ArrayList<A> même si A est une super-classe ou une interface de B.
Pour pouvoir faire la conversion, il faut le faire en 2 étapes en passant par une ArrayList générique.
Tu n'est pas obligé d'utiliser une ArrayList générique partout, mais tu ne sauras pas éviter d'avoir un warning lors de la double conversion...
Pour pouvoir faire la conversion, il faut le faire en 2 étapes en passant par une ArrayList générique.
Tu n'est pas obligé d'utiliser une ArrayList générique partout, mais tu ne sauras pas éviter d'avoir un warning lors de la double conversion...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mouarf, au moins je ne suis pas le seul ^^
J'espère que ce "bug" sera fixé un jour, car comme tu le dis c'est un peu aberrant (à moins qu'on ne soit passé à côté de quelque chose...)
J'espère que ce "bug" sera fixé un jour, car comme tu le dis c'est un peu aberrant (à moins qu'on ne soit passé à côté de quelque chose...)
C'est un peu tard pour répondre mais comme je suis tombé sur ce topic en cherchant à caster une liste ça peut servir à quelqu'un d'autre.
Si on a accès au code source de la fonction qui prend une liste générique en paramètre on peut faire comme ça :
public <T extends ClasseMere> T test(List<T> l) {
return l.get(0);
}
pour appeler cette méthode :
List<ClasseFille> l = ...;
ClasseFille x = test(l); // ça marche, pas besoin de caster ni la liste ni le résultat
Si on a accès au code source de la fonction qui prend une liste générique en paramètre on peut faire comme ça :
public <T extends ClasseMere> T test(List<T> l) {
return l.get(0);
}
pour appeler cette méthode :
List<ClasseFille> l = ...;
ClasseFille x = test(l); // ça marche, pas besoin de caster ni la liste ni le résultat