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 :

constructeurs d'une class


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2007
    Messages : 71
    Points : 64
    Points
    64
    Par défaut constructeurs d'une class
    bonsoir
    j'ai une classe avec deux constructeurs
    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
     
    public class maclass
    {
    private int v3;
    public maclass(int v1,int v2)
    {
    //traitement
    }
    public maclass(int v1,int v2,String v3)
    {
    this.v3=v3;
     
    this(v1,v2);
    }
    }
    mais le compilateur génère une erreur au niveau de l'instruction this(v1,v2)
    je comprant pas pourquoi
    et est-ce que je doit redéfinir le code du premier constructeur dans le deuxième
    merci

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    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
    public class maclass{
          private String v3;
          private int v1,v2;
     
          public maclass(int v1,int v2){
                this.v1 = v1;
                this.v2 = v2;
                this.v3 = null;
                this.traitement();
     
          }
     
          public maclass(int v1,int v2,String v3){
                this.v1 = v1;
                this.v2 = v2;
                this.v3=v3;
                this.traitement();
     
          }
     
          private void traitement(){
                //traitement
          }
    }
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par sofiene D Voir le message
    mais le compilateur génère une erreur au niveau de l'instruction this(v1,v2)
    je comprant pas pourquoi
    et est-ce que je doit redéfinir le code du premier constructeur dans le deuxième
    merci
    La délégation à un autre constructeur doit obligatoirement etre la premier instruction de ton constructeur. Ton code devrais donc etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public maclass(int v1,int v2)
    {
    //traitement
    }
    public maclass(int v1,int v2,String v3)
    {
    this(v1,v2);
    this.v3=v3;
    }
    PS: essaie de respecter les convention de nommage java, Les classes commencent toujours par une majuscule.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2007
    Messages : 71
    Points : 64
    Points
    64
    Par défaut
    bonsoir
    PS: essaie de respecter les convention de nommage java, Les classes commencent toujours par une majuscule.
    maclass est juste un exemple réalment ma classe est R_dgs

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un nommage correct dans ce cas serait RDgs

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Ivelios : Justement l'objectif est d'éviter la duplication du code...



    Sinon pour l'utilisation de multiple constructeur il y a deux approches :

    La première, utilisé ici, consiste à ne traiter les nouveaux paramètres QUE dans le constructeur où on les déclare. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public Maclass(int v1) {
    		this.v1 = v1;
    	}
    	public Maclass(int v1, int v2) {
    		this(v1);
    		this.v2 = v2;
    	}
    	public Maclass(int v1, int v2, String v3) {
    		this(v1, v2);
    		this.v3 = v3;
    	}
    Cette approche la plus simple et la plus logique de prime abord pose quand même des soucis :
    • Selon le constructeur utilisé certains attributs ne seront pas initialisés. Ils prendront donc forcément la valeur 0 ou null selon leurs types...
    • A cause de cela, on ne peut pas définir d'attribut final mis à part dans le constructeur initial.




    La seconde approche consiste tout simplement à faire l'inverse. C'est à dire qu'au lieu de partir du constructeur le plus simple, on part du plus complet.

    En clair on utilise le constructeur avec le plus de paramètres et on y initialise TOUS les champs, éventuellement en gérant les valeurs nulles si besoin. Les autres constructeur font alors appel à ce constructeur plus ou moins directement, en rajoutant les valeurs par défaut pour les champs absents :

    Cela donne quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public Maclass(int v1) {
    		this(v1, 10); // 10 = valeur par défaut pour v2
    	}
    	public Maclass(int v1, int v2) {
    		this(v1, v2, null);
     
    	}
    	public Maclass(int v1, int v2, String v3) {
    		this.v1 = v1;
    		this.v2 = v2;
    		this.v3 = (v3==null ? "" : v3);
    	}
    L'avantage vient du fait qu'on peut facilement définir des valeurs par défaut, et que cela s'apparente plus aux paramètres optionnelles du C++.


    a++

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu peux nous montrer le code? Ce code mis en évidence par le compilateur est pour le moins curieux.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Décembre 2007
    Messages : 71
    Points : 64
    Points
    64
    Par défaut
    merci adiGuba tchize_pour votre aide
    ça marche en fin

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

Discussions similaires

  1. [POO] constructeur d'une class
    Par spirou dans le forum Langage
    Réponses: 13
    Dernier message: 05/07/2006, 16h11
  2. [Débutant] Constructeur d'une classe
    Par chennuo dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2006, 22h17
  3. Réponses: 2
    Dernier message: 04/12/2005, 21h10
  4. Réponses: 5
    Dernier message: 20/11/2005, 11h15
  5. Réponses: 3
    Dernier message: 06/11/2005, 18h02

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