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

avec Java Discussion :

Traitement particulier pour objet contruit par copie


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 49
    Points : 44
    Points
    44
    Par défaut Traitement particulier pour objet contruit par copie
    Bonjour,
    Je debute en Java. Je voudrais pouvoir afficher avec toString un objet et faire la différence selon le cas où l'objet est construit par copie(cloné) ou non.
    Seulement je ne sais pas comment faire reconnaitre qu' un objet est construit par recopie que toString affiche "contruit par copie" et "non contruit par copie" .
    Merci

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    En Java la construction par copie est essentiellement une construction normale, c'est juste que Java peut s'occuper lui-même de recopier les attributs si on lui demande.

    Ce qui veut dire qu'à moins de faire en sorte qu'il y ait une différence entre l'objet d'origine et l'objet copié, il n'y a aucune raison qu'il existe une différence.
    Tu devrais donc faire programmer toi-même la construction par copie, de sorte de faire une différence entre l'original et la copie. Exemple :

    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
    public class BilletDeBanque implements Cloneable {
      private boolean copie; // false tant qu'on lui dit pas le contraire
     
      public boolean estUneCopie() {
        return copie;
      }
     
      @Override
      public BilletDeBanque clone() {
        try {
          BilletDeBanque duplicata = (BilletDeBanque)super.clone();
          duplicata.copie = true;
          return duplicata;
        } catch (CloneNotSupportedException e) {
          // CloneNotSupportedException ne sert à rien, mais on doit le gérer pour raisons historiques.
          throw new IllegalStateException(e.getMessage(), e);
        }
      }
    Attention. La question est intéressante, car on peut avoir besoin de traiter des objets après les avoir clonés avec le clonage de Java.
    Mais c'est une mauvaise idée de faire juste une différence cloné/pas cloné. Qu'un objet soit cloné ou pas, on s'en fiche, c'est juste un objet qui contient des données. Quand on veut faire la différence entre deux objets, c'est qu'on a une vraie raison, et c'est sur cette raison qu'il faut s'appuyer. Genre indiquer quelle personne a demandé la création de l'objet quand on le duplique, ou ce genre de choses.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    L3 informatique
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : L3 informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 26
    Points
    26
    Par défaut Rajout d'un boolean
    Je pense tout d'abord que tu devrais coder ton constructeur par copie toit même en rajoutant à ton objet un boolean qui est initialisé à false dans ton contructeur "normal" Ainsi tu auras par exemple:

    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
    25
    26
     
    public class Contact {
     
         private String nom;
         private String numero;
         private boolean copie
     
         public Contact(String n , String num){
              this.nom=n;
              this.numero=num;
              this.copie=false;
         }
     
         public Contact(Contact c){
              this.nom=c.nom;
              this.numero=c.numero;
              this.copie=true;
         }
     
         public void toString(){
              if (copie)
                   System.out.println("Construit par recopie");
              else
                   System.out.println("Non construit par recopie");
         }
    }
    Voilà, j’espère que cela t'aideras.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/05/2010, 16h17
  2. Réponses: 0
    Dernier message: 26/07/2007, 13h45
  3. map pour stocker un type particulier d'objet
    Par pseudobidon57 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 21/06/2007, 15h01
  4. Réponses: 3
    Dernier message: 27/09/2006, 15h38
  5. Utiliser les exceptions pour un traitement particulier ?
    Par Blustuff dans le forum Assembleur
    Réponses: 11
    Dernier message: 01/12/2004, 02h21

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