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 :

Meilleure méthode quand plusieurs constructeurs


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut Meilleure méthode quand plusieurs constructeurs
    Bonjour,

    J'ai une question assez simple mais qui me turlupine ...

    Question éthique et question performances, pour éviter de recopier du code dans différents constructeurs, mieux vaut-il faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MaClasse {
      public MaClasse() {
        new MaClasse( "Pas d'argument !");
      }
     
      public MaClasse( String maChaine) {
        System.out.println( maChaine );
      }
    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MaClasse {
      public MaClasse() {
        affiche( "Pas d'argument !" );
      }
     
      public MaClasse( String maChaine ) {
        affiche( maChaine );
      }
     
      public void affiche ( String maChaine ) {
        System.out.println( maChaine );
      }
    Vaut-il mieux faire une méthode qui fait la construction ou alors appeler les constructeurs entre eux ? Dans le cas n°1 est-ce que ca instancie 2 fois l'objet ?

    Bien sur dans des cas avec de GROSSES CLASSES !!!

    Merci de vos lumières ^^

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ta solution 1 n'est pas correcte car tu construis un autre objet MaClasse pendant la construction de ton objet. L'output peut être correct mais le principe est faux.

    Il y a pour moi 2 solutions propres :

    La première : les constructeurs appellent le constructeur le plus détaillé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class MaClasse {
      public MaClasse() {
        this( "Pas d'argument !" );
      }
     
      public MaClasse( String maChaine ) {
        affiche( maChaine );
      }
     
      private void affiche ( String maChaine ) {
        System.out.println( maChaine );
      }
    La seconde utilise un Builder et ne vaut que si tu as beaucoup beaucoup de paramètres optionnels (je ne fais l'exemple qu'avec un paramètre) :

    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
     
    public class MaClasse {
      public MaClasse(Builder builder) {
        affiche(builder.chaine);
      }
      private void affiche ( String maChaine ) {
        System.out.println( maChaine );
      }
     
      public static class Builder {
        String chaine = "Pas d'argument !";
        public Builder maChaine(String maChaine) {
          this.chaine = maChaine; return this;
        }
      }
    }
    A construire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaClasse maClasse = new MaClasse.Builder();
    MaClasse maClasse = new MaClasse.Builder().maChaine("ma chaine");

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    +1 pour la solution 1 corrigé par natha !

    Par contre la méthode affiche() devrait être déclaré en private de préférences (les constructeurs ne devrait pas appeler de méthodes non-private ou non-final pour éviter certain effet de bord)


    a++

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Par contre la méthode affiche() devrait être déclaré en private de préférences (les constructeurs ne devrait pas appeler de méthodes non-private ou non-final pour éviter certain effet de bord)
    Bonne remarque effectivement. J'me suis concentré sur son problème de constructeur

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Avril 2005
    Messages : 277
    Par défaut
    Oki merci ...

    Pour le "public" désolé j'ai tapé les 2 bouts de code vite fais ... Mais oui bien mettre un private !!!

    Sinon j'avais jamais pensé au this( ... );

    J'ai honte de moi la ... Comme quoi ...

    En tous cas merci bcp !!! ^^

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/10/2005, 21h35
  2. Meilleure Méthode pour parcourir un tableau
    Par KPitN dans le forum MFC
    Réponses: 7
    Dernier message: 24/02/2005, 16h19
  3. Meilleur méthode pour stocker mes données
    Par cyberlewis dans le forum Windows
    Réponses: 6
    Dernier message: 03/07/2004, 11h53
  4. Réponses: 3
    Dernier message: 24/06/2004, 11h23
  5. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 14h41

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