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 :

Comment gérer des sous ensembles avec des "enum" ?


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    CTO
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : CTO

    Informations forums :
    Inscription : Mars 2003
    Messages : 10
    Points : 13
    Points
    13
    Par défaut Comment gérer des sous ensembles avec des "enum" ?
    Bonjour,

    Tout est dans l'objet de ce fil : Comment gérer des sous ensembles avec des "enum" ?

    J'ai une collection d'infos gérées dans une EnumMap

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class MyParams extends EnumMap<EParams,String>
    {
    ...
    }
    Et je souhaite que l'énumération "EParams" soit la somme de trois énumérations distinctes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public enum EParamsConfig 
    {
      TRACEON,OSPASS;
    }
    enum EParamsInit
    {
      PROTOCOL,HOST,PORT;
    }
    enum EParamsLaunch
    {
      OSUSER,OSPASS;
    }
    Est-ce possible ?

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

    Citation Envoyé par ogattaz
    Et je souhaite que l'énumération "EParams" soit la somme de trois énumérations distinctes.

    ...

    Est-ce possible ?
    Non ce n'est pas possible tel quel... Enfin il n'est pas possible de faire de tel liens entres les enums


    Perso je vois deux solutions :

    • Créer une énumération EParams avec les mêmes valeurs, mais qui possède une méthode static permettant de "convertir" les autres enums vers EParams :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      enum EParams {
      	TRACEON, OSPASS, PROTOCOL, HOST, PORT, OSUSER;
       
      	public static EParams convert(Enum<?> e) {
      		return valueOf(e.name());
      	}
      }
    • Utiliser une interface pour EParams et non pas une enum :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      interface EParams {
      	int getEParamsValue();
      }
      Chacune des enums implémentant cette interface :
      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
      enum EParamsConfig implements EParams {
      	TRACEON(0), OSPASS(1);
       
      	private final int eParamsValue;
       
      	EParamsConfig(int value) {
      		this.eParamsValue = value;
      	}
       
      	public int getEParamsValue() {
      		return this.eParamsValue;
      	}
      }
       
      enum EParamsInit implements EParams {
      	PROTOCOL(2), HOST(3), PORT(4);
       
      	private final int eParamsValue;
       
      	EParamsInit(int value) {
      		this.eParamsValue = value;
      	}
       
      	public int getEParamsValue() {
      		return this.eParamsValue;
      	}
      }
       
      enum EParamsLaunch implements EParams {
      	OSUSER(5), OSPASS(6);
       
      	private final int eParamsValue;
       
      	EParamsLaunch(int value) {
      		this.eParamsValue = value;
      	}
       
      	public int getEParamsValue() {
      		return this.eParamsValue;
      	}
      }


    a++

  3. #3
    Membre à l'essai
    Profil pro
    CTO
    Inscrit en
    Mars 2003
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : CTO

    Informations forums :
    Inscription : Mars 2003
    Messages : 10
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta réponse.

    J'ai choisi de définir une autre enumération "EParameterKind"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public enum EParameterKind
    {
      LAUNCH,
      INIT,
      CONFIG;
    }
    que j'utilise pour typer mes instances de "EParameterId" a laquelle j'ai ajouté les constructeurs privés nécessaires :
    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
    public enum EParameterId
    {
      UNKNOWN,
      // --
      LAUNCHLOCALUSERID(EParameterKind.LAUNCH),
      LAUNCHLOCALUSERPASS(EParameterKind.LAUNCH),
      LAUNCHREMOTEUSERID(EParameterKind.LAUNCH),
      // --
      DOSSIER(EParameterKind.INIT, 1),
      PROTOCOL(EParameterKind.INIT, 2),
      LANG(EParameterKind.INIT, 3),
      X3USER(EParameterKind.INIT, 4),
      X3PASS(EParameterKind.INIT, 5),
      DATE(EParameterKind.INIT, 6),
      ADXCTX(EParameterKind.INIT, 7),
      PORT(EParameterKind.INIT, 8),
      OSUSERID(EParameterKind.INIT, 9),
      OSPASS(EParameterKind.INIT, 10),
      ADXTYP(EParameterKind.INIT, 11),
      LOCALRUNTIMEHOST(EParameterKind.INIT, 14),
      LOCALRUNTIMEPORT(EParameterKind.INIT, 15),
      BACKGROUND(EParameterKind.INIT, 16),
      LOCALRUNTIMESTARTED(EParameterKind.INIT, 17),
      // --
      VERSION(EParameterKind.CONFIG);

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

Discussions similaires

  1. [Débutant] création de diagramme sous C# avec des données reçues à partir des capteurs
    Par yassinesama dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2013, 14h04
  2. Réponses: 1
    Dernier message: 02/08/2012, 08h56
  3. Réponses: 3
    Dernier message: 16/12/2006, 12h59

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