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

Collection et Stream Java Discussion :

Dériver une ArrayList<E> et la cloner correctement


Sujet :

Collection et Stream Java

  1. #1
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut Dériver une ArrayList<E> et la cloner correctement
    Bonjour.

    Est-ce que vous pouvez m'aider pour la difficulté suivante :
    1) Les données
    *** Je dispose d'une classe CombinaisonKakuro (crée par moi-même)
    *** Je dérive la classe ArrayList<CombinaisonKakuro> (spécificité pour version >= Java 5 : nom de code Tiger)
    ---- elle contient néanmoins un memebre supplémentaire de type int[] : listeCardinal
    ----- seul le constructeur par défaut de ReservoirCombinaisonKakuro est défini : il initialise notamment son membre listeCardinal.



    pubic class ReservoirCombinaisonkakuro extends ArrayList<CombinaisonKakuro>
    implements Cloneable {
    /**....**/
    protected int[] listeCardinal;
    /**...**/
    }



    2) Voilà, cette classe je veux la cloner. Mais pour moi cette situation est inédite car et ArrayList<E> et int[] sont clonable et doivent être clonées dans mon cas. Comment puis-je m'y prendre ?

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Il y a un tutoriel sur le clonage des objets en Java : Cloner en Java.

  3. #3
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Pour ce qui concerne les génériques et clone, il peut être intéressant de compléter cette lecture par How do I best implement the clone method of a generic type?, qui explique la nécessité du unchecked warning, et propose de spécialiser le type retour, et parle encore de deux ou trois choses toujours bonnes pour la culture générale.

  4. #4
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut Un membre de type T nécessaire ?
    Merci
    Voilà ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public ReservoirCombinaisonKakuro clone(){
    		ReservoirCombinaisonKakuro retour = null;
    		retour = (ReservoirCombinaisonKakuro) super.clone();
    		return retour;
    }
    Par contre je comprends pas pourquoi ça fonctionne bien : super doit faire référence à ArrayList<CombinaisonKakuro> qui ne contient pas de membre int [] listeCardinal, et non à ReservoirCombinaisonKakuro, qui contient ce membre ... et pourtant ma listeCardinal a bien été clonnée ! (D'où le doute que j'avais). this.super a-t-il fait appel à un ReservoirCombinaisonKakuro ?

  5. #5
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    super.clone fait appel non seulement à ton ArrayList<CombinaisonKakuro>, mais de plus à Object.clone, et cette méthode, par construction, crée un objet non pas de la classe Object, mais de la classe demandeuse, donc, ici, ReservoirCombinaisonKakuro. C'est même pour cela qu'il faut appeler super.clone dans tout redéfinition de la méthode clone. Donc, tout va bien pour les attributs, heureusement.

  6. #6
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut
    merci, j'ai compris

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

Discussions similaires

  1. Dériver une paire de clé RSA à partir d'un mot de passe
    Par Strab dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/03/2006, 12h28
  2. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15
  3. [Collections]Compter les mots différents d'une ArrayList
    Par alanpix dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/11/2005, 22h11
  4. [C#] Passage en paramètre d'une ArrayList
    Par bendj dans le forum ASP.NET
    Réponses: 6
    Dernier message: 16/08/2005, 10h41
  5. Réponses: 2
    Dernier message: 02/08/2005, 09h40

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