IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

cast de list


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut cast de list
    Bonjour

    J'ai une classe mere dont le constructeur a pour argument List<Deletable> que j etends et call super(List<Site>) ce qui compile une erreur.

    J'ai pense a changer le constructeur de la classe mere List<? extends Deletable>, ce qui me permet de construire la classe fille sans probleme, mais toutes les operation sur la list posent alors probleme.

    Je cherche donc un moyer de contourner ceci.

    Note sur les objects: Site extends Deletable.

    Classe mere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    /* 1ere solution le call de super compile une erreur dans la classe fille*/
    public abstract class DeletableComboBoxModel extends ..{
     
        protected List<Deletable> list;
     
        public DeletableComboBoxModel(List<Deletable> aList){
              list = aList;
        }
     
    /* 2eme solution le call de super dans la classe fille passe mais les operations sur la list posent un probleme*/
    public abstract class DeletableComboBoxModel extends ..{
     
        protected List<? extends Deletable> list;
     
        public DeletableComboBoxModel(List<? extends Deletable> aList){
              list = aList;
        }
     
      //Implements MutableComboBoxModel
        public void addElement(Object anObject) {
            list.add( (Deletable)anObject );    //Ceci compile va compiler une erreur.
            .....
        }
    Classe fille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class SiteComboBoxModel
                extends DeletableComboBoxModel {
     
        public SiteComboBoxModel() {
            super( DAOFactory.getSiteDAO().getRecordList() );
            // DAOFactory.getSiteDAO().getRecordList()  return List<Site>
     
        }
    }
    Merci pour els reponses.

  2. #2
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Bonjour,

    Tu peux paramétrer ton type pour le rendre générique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public abstract class DeletableComboBoxModel<T extends Deletable> extends ..{
     
        protected List<T> list;
     ...
    Partout où tu utilisais Deletable, tu utilises T. Tous les objets T se comporteront comme un Deletable.

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il est normal que cela pose problème ; par définition, si tu as d'un côté une liste de Site, c'est que tu veux ne pouvoir y insérer que des Site.
    Et si une méthode prend en argument une liste de Deletable, c'est qu'on s'attend à ce qu'elle puisse modifier ladite liste prise comme liste de Deletable, donc potentiellement ajouter des objets descendant de Deletable, mais pas de Site. En conséquence tu te retrouverais avec une gros problème sur les bras à l'exécution !

    Si aucune modification de la liste n'est prévue et/ou souhaitée, tu peux toujours créer une nouvelle liste du type idoine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Deletable> deletableList = new ArrayList<Deletable>(siteList);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut
    Merci pour les reponses rapides.

    Effectivement en utilisant le type générique qui extends Deletable ca marche parfaitement et j'ai bien acces a un object deletable....

    je passe le sujet en resolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cast de liste générique
    Par ppphil dans le forum C#
    Réponses: 10
    Dernier message: 28/01/2011, 17h07
  2. cast et listes chaînées
    Par onodi dans le forum Débuter
    Réponses: 4
    Dernier message: 11/01/2010, 13h58
  3. Faire un cast tuple -> list
    Par ffets dans le forum Général Python
    Réponses: 12
    Dernier message: 22/12/2007, 19h51
  4. [PRBL]Caste une liste d'une liste d'objet
    Par stephane92400 dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2007, 21h01
  5. Cast de List
    Par beebop dans le forum C#
    Réponses: 4
    Dernier message: 11/01/2007, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo