Hello,
J'ai une liste visible sous la forme List<Object>. Mais je sais que j'ai que des Toto dedans.
Comment la "caster" en List<Toto> ?
Merci !
Anthony
Hello,
J'ai une liste visible sous la forme List<Object>. Mais je sais que j'ai que des Toto dedans.
Comment la "caster" en List<Toto> ?
Merci !
Anthony
Salut,
Je dirais qu'il faudrait supprimer le typage Generics pour pouvoir ensuite caster... ce qui donne un double cast :
Mais ce n'est pas très propre et TRES TRES dangereux (si jamais ta liste comporte un seul objet tu vas te retrouver avec des erreurs aléatoires loin de l'utilisation de la nouvelle liste et non pas sur le cast !).
Code : Sélectionner tout - Visualiser dans une fenêtre à part List<Toto> listToto = (List<Toto>) (List<?>) list;
Ce qui me gêne c'est que théoriquement tu ne devrais pas avoir à faire cela avec les Generics (sauf depuis une List non paramétré pour la compatibilité), donc j'aimerais bein savoir ce qui t'amène à faire cela...
a++
N'y aurait-il pas un problème de conception ? Pour ta List<Object>, es-tu certain de ne pas pouvoir la déclarer de type List<?> ? Ce serait plus propre.
Si tu ne peux pas, je pense que tu devras recréer une autre liste et tout transférer, par addAll.
Effectivement, le List<?> semble plus approprié dans mon cas.
Sans entrer dans les détails, le but de la manœuvre est de "voir" un objet sous-différentes manières, sans qu'il ait à implémenter d'interface particulière.
Pas mal de réflection et d'AOP...
Merci pour vos réactions
Toine
Le problème c'est que cela correspond à un code non-secure qui va à l'encontre de la philosophie des Generics... ce qui provoque plein de warning/erreur !
Il y a sûrement une meilleure solution que ces méchants casts...
a++
Peut-être...
Un des cas est par exemple, que j'annote une méthode de mon objet @Parent. Cette méthode est alors utilisée pour retourner l'objet parent. Tout cela dans une notion de hiérarchie d'objets...
Lorsque l'utilisateur souhaite voir une hiérarchie d'objets sous une forme unifiée, il passe par "quelque chose", qui va faire en sorte de lui présenter les objets sous forme d'une interface "Node" avec un getParent() et getChildren() par exemple. Le mécanisme de découverte du parent et des enfants n'est pas figé : dans le cas exposé ci-dessus, on les récupère via des méthodes annotées.
Voilà en gros l'idée...
Toine
Partager