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 :

Conversion entre un "enum" et l'index (int) d'une table


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Conversion entre un "enum" et l'index (int) d'une table
    Pour raison de clareté, j'aimerais que l'index de ma table 'arbre_TableSecond' puisse être un élément intelligible d'un 'enum', plutôt que '0', '1', ... Il s'agit donc d'une question d'intérêt très général.

    Ma classe 'enum' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum EnVigueurDepuis { d0805, d0907 }    // Ne peut pas être  0805, 0907
    Ma table principale, incluant plusieurs fois l'un des (deux) éléments de ma table secondaire et servant à la création d'un menu arborescent ('DefaultMutableTreeNode') :
    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
    class Tarif_TablePrincip
    {   static  private  Object[]  arbre_TablePrincip;
        String[] annéeMois = {"2008 Mai", "2008 Novembre", "2009 Août"};
     
        Tarif_TablePrincip()
        {   arbre_TablePrincip = new Object[]
            {   (new Tarif_TableSecond(annéeMois[0])).
                          get_Tarif_TableSecond(EnVigueurDepuis.d0805),
                (new Tarif_TableSecond(annéeMois[1])).
                          get_Tarif_TableSecond(EnVigueurDepuis.d0805),
                (new Tarif_TableSecond(annéeMois[2])).
                          get_Tarif_TableSecond(EnVigueurDepuis.d0907)
            };
        }
     
        static Object[] get_Tarif_TablePrincip()
        {   return arbre_TablePrincip;
        }
    }
    Ma table secondaire à plusieurs éléments, comprenant les nomenclatures de tarifs qui ne changent que de temps en temps :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    class Tarif_TableSecond
    {   private Object[][] arbre_TableSecond;
     
        Tarif_TableSecond(String annéeMois)
        {   // Tables secondaires à multicopier
            this.arbre_TableSecond = new Object[][]
            {  /* Chaque élément d'array : Année et mois d'entrée en vigueur d'une
                * nouvelle nomenclature de tarif.
                */
                new Object[]    // Depuis 2008 Mai
                {   // 'annéeMois' : Année et mois de publication effective d'un nouveau tarif,
                    new String(annéeMois),  // tels qu'à afficher dans le menu arborescent.
                    new Object[]
                    {   new String( "Région1" ),
                        new Object[]
                        {   new String( "Distributeur1"),
                            new Feuille("Formule1")
                        },
                        new Object[]
                        {   new String( "Distributeur4"),
                            new Feuille("Formule1"),
                            new Feuille("Formule2")
                        }
                    },
                    new Object[]
                    {   new String( "Région2" ),
                        new Object[]
                        {   new String( "Distributeur1"),
                            new Feuille("Formule1"),
                            new Feuille("Formule2"),
                            new Feuille("Formule3")
                        },
                        new Feuille"Distributeur2"),
                        new Object[]
                        {   new String( "Distributeur3"),
                            new Feuille("Formule1"),
                            new Feuille("Formule2")
                        },
                        new Object[]
                        {   new String( "Distributeur4"),
                            new Feuille("Formule1"),
                            new Feuille("Formule2"),
                            new Feuille("Formule3")
                        }
                    }
                },
                new Object[]    // Depuis 2009 Juillet
                {   new String(annéeMois),
                    new Object[]
                    {   new String( "Région1" ),
                        new Feuille("Distributeur1"),
                        new Object[]
                        {   new String( "Distributeur3"),
                            new Feuille("Formule1")
                        }
                    },
                    new Object[]
                    {   new String( "Région2" ),
                        new Feuille("Distributeur1"),
                        new Object[]
                        {   new String( "Distributeur2"),
                            new Feuille("Formule1"),
                            new Feuille("Formule2")
                        },
                        new Object[]
                        {   new String( "Distributeur3"),
                            new Feuille("Formule1"),
                            new Feuille("Formule2")
                        },
                        new Feuille("Distributeur4")
                    }
                }
            };
        }
     
        public Object[] get_Tarif_TableSecond(EnVigueurDepuis depuisAnnéeMois)
        {   return arbre_TableSecond[(int) depuisAnnéeMois];
        }
    }
    Dans cette dernière fonction 'get_Tarif_TableSecond...', l'index de la table 'arbre_TableSecond[(int) depuisAnnéeMois]' s'attend bien sûr à voir un 'int'. Le précompilateur m'envoie donc
    Inconvertible types
    Found : <package>.EnVigueurDepuis
    Required: int
    lorsque je lui propose un 'enum'. Les 'enum' fonctionnent pourtant en arr!ère plan avec des 'int'. Que dois-je faire ? Merci d'avance.

  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 Chavadam Voir le message
    lorsque je lui propose un 'enum'. Les 'enum' fonctionnent pourtant en arr!ère plan avec des 'int'.
    Non ! En Java les enums sont des objets à part entière.

    Tu peux donc leurs associer des valeurs quelconque. 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
    enum MonEnum {
    	VALUE_A(100), VALUE_B(200);
     
    	private final in value;
     
    	private MonEnum(int value) {
    		this.value = value;
    	}
     
    	public int getValue() {
    		return this.value;
    	}
    }

    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut
    Merci pour ta réponse, adiGuba.
    Elle me fait comprendre que le seul moyen en Java pour arriver à convertir une variable de type 'enum' en type 'int' est d'associer soi-même une valeur entière incrémentée à la suite de chaque élément de l''enum' ...
    Mon 'enum' devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    enum EnVigueurDepuis
    {   d0805(0), d0907(1);
     
    	private final int valeur;
     
    	private EnVigueurDepuis(int valeur)
        {   this.valeur = valeur;
    	}
     
    	public int getValeur()
        {   return this.valeur;
    	}
    }
    et ma fonction devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        public Object[] get_Tarif_TableSecond(EnVigueurDepuis depuisAnnéeMois)
        {   return arbre_TableSecond[depuisAnnéeMois.getValeur()];
        }
    Mmouaih ... !
    Et cela a l'air de fonctionner.
    Merci.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Citation Envoyé par Chavadam Voir le message
    le seul moyen en Java pour arriver à convertir une variable de type 'enum' en type 'int' est d'associer soi-même une valeur entière incrémentée à la suite de chaque élément de l''enum' ...
    Ce n'est pas nécessaire, les enum sont associés par défaut à un entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public enum EnVigueurDepuis {
        d0805, d0907;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Object[] get_Tarif_TableSecond(EnVigueurDepuis depuisAnnéeMois){
        return arbre_TableSecond[depuisAnnéeMois.ordinal()];
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Par défaut Conversion d'un 'enum' en 'int' pour index d'une table
    That's it.
    Sempiternels remerciements, adiGuba et verbose.

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

Discussions similaires

  1. Difference entre [Simple quote] & [Double quote]
    Par Invité dans le forum SQL
    Réponses: 3
    Dernier message: 24/07/2013, 12h24

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