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 :

Enums en Java 5 : question


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut Enums en Java 5 : question
    Bonjour

    Je viens du C, et j'ai la longue habitude d'écrire ce genre de choses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    enum TOTO
    {
      VALEUR1=-1,
      VALEUR2,
      VALEUR3,
      VALEUR4,
      VALEUR5=VALEUR3,
      VALEUR6,
      VALEUR7=20,
      VALEUR8
    };
    donnant (-1, 0, 1, 2, 1, 2, 20, 21) comme série de valeurs

    J'ai essayé d'adapter ça en Java 5, j'arrive à gérer les affectations directes, mais j'ai il me reste un problème

    code java :
    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
    enum TOTO
    {
      VALEUR1(-1),
      VALEUR2,
      VALEUR3,
      VALEUR4,
      VALEUR5(VALEUR3),
      VALEUR6,
      VALEUR7(20),
      VALEUR8;
     
      private int valeur;
      public valeur() { return this.valeur; }
      TOTO(final int i) { this.valeur=i; }
      TOTO(TOTO i) { this.valeur=TOTO.valeur(); }
     
      TOTO() {
        final int ord=this.ordinal();
        if (ord==0)
          this.valeur=0;
        else
          this.valeur=TOTO.values()[ord-1].value()+1; // ici est mon problème
      }
    }
    Le problème est que je n'ai pas accès à enum.values() dans un constructeur de l'enum, et que je suis obligé de passer par un compteur statique externe, ce qui est très moche.

    Quelqu'un a une idée?

  2. #2
    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,

    Citation Envoyé par Sxilderik Voir le message
    Le problème est que je n'ai pas accès à enum.values() dans un constructeur de l'enum,
    Ce qui est tout à fait normal puisque les enums ne sont pas encore instancié...

    Citation Envoyé par Sxilderik
    et que je suis obligé de passer par un compteur statique externe, ce qui est très moche.
    Je ne trouve pas cela si moche que cela

    Par contre tu devrais utiliser un final pour ton attribut "valeur" :
    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
    27
    28
    enum Toto {
    	VALEUR1(-1),
    	VALEUR2,
    	VALEUR3,
    	VALEUR4,
    	VALEUR5(VALEUR3),
    	VALEUR6,
    	VALEUR7(20),
    	VALEUR8;
     
    	private static int compteur = -1;
     
    	private final int valeur;
     
    	private Toto() {
    		this(++Toto.compteur);
    	}
     
    	private Toto(Toto toto) {
    		this(toto.valeur);
    		System.out.println( Toto.values() );
    	}
     
    	private Toto(int x) {
    		this.valeur = x;
    		Toto.compteur = this.valeur;
    	}
    }
    a++

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut
    Oui, pour le final, le bout de code était une version rapide, dans mon code de prod j'ai bien un final

    Par contre, merci pour le compteur interne, j'en étais resté bêtement à un compteur externe (externe à l'énum), et je t'assure que c'était moooche ! :p

    (Et merci au passage pour les noms de variables en français, c'est un combat que je mène de mon côté mais on préfère ici utiliser de l'anglais de cuisine...)



  4. #4
    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
    Citation Envoyé par Sxilderik Voir le message
    Par contre, merci pour le compteur interne, j'en étais resté bêtement à un compteur externe (externe à l'énum), et je t'assure que c'était moooche ! :p
    Oui là je comprend mieux

    Citation Envoyé par Sxilderik
    (Et merci au passage pour les noms de variables en français, c'est un combat que je mène de mon côté mais on préfère ici utiliser de l'anglais de cuisine...)
    Je m'adapte car c'étais déjà comme cela dans ton code... mais en général j'utilise de l'anglais

    Mais au passage je n'ai pas pus résister à rectifier le nom de l'enum : TOTO Toto

    Sinon un détail pratique (surtout en debug) : la méthode toString() des enum renvoi par défaut le nom de la valeur. Tu pourrais la redéfinir pour qu'elle affiche en plus la valeur de l'enum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	@Override
    	public String toString() {
    		return name() + "(" + this.valeur + ")";
    	}
    a++

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

Discussions similaires

  1. Type "enum" en java
    Par mazodo dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 12/04/2010, 14h53
  2. Debut en java divers questions.
    Par NeoKript dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 12/10/2009, 10h23
  3. [Java] Diverses questions sur la certification Java
    Par dingoth dans le forum Certifications
    Réponses: 1
    Dernier message: 03/11/2008, 20h53
  4. RoR/Java une question.
    Par boubek dans le forum Ruby on Rails
    Réponses: 6
    Dernier message: 08/02/2008, 21h25
  5. Les enum en java
    Par andromeda dans le forum Langage
    Réponses: 9
    Dernier message: 31/07/2007, 16h16

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