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 :

récupérer le nom d'un champ static par sa valeur


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut récupérer le nom d'un champ static par sa valeur
    Voilà mon problème:
    J'ai une classe State avec plusieurs champs static
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /** disconnected state */
    	public static final int DISCONNECTED = 0;
     
    	/** waiting connection confirmation state */
    	public static final int WAITING_CONNECTION_CONFIRMATION = 1;
     
    	/** connected with local list state */
    	public static final int CONNECTED_LOCAL_LIST = 2;
     
    	/** connected state */
    	public static final int CONNECTED = 3;
     
    	/** select a file to download state */
    	public static final int P2P_SELECTED = 4;
    J'aimerai afficher un de ces champs non pas avec la valeur de l'entier, mais avec le nom du champs qui correspond à une valeur donnée. par exemple si je donne la valeur int state = 3, j'aimerais qu'il me retourne la chaine "CONNECTED". Voici l'entete de ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static String getStringState(int state)
    Je pense qu'il faut utiliser l'introspection ou la reflexivité, en regardant les tuto et la faq, c'est ce qui s'en rapproche le plus. Cependant je n'ai pas trouvé comment faire -_-'

  2. #2
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    bonjour
    sinon tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static String getStringState(int state){
        return (state==CONNECTED?"CONNECTED":" ";
    }
    mais vu que CONNECTED soit un nom de variable mais une constante ........................

  3. #3
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    oui je peu faire comme ça, mais vu que mes etat vont peu être changer, je voulais ne pas avoir à tout changer mon Switch case -_-'
    il me faudrait un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String res = getNomDuChampsStaticQuiALaValeur(int state)

  4. #4
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    en fait voilà ma solution actuelle, version "little player" qui n'est pas évolutif:
    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 static String getStringState(int state) {
    		String stringState = "";
    		switch (state) {
    			case DISCONNECTED:
    				stringState = "DISCONNECTED";
    			case WAITING_CONNECTION_CONFIRMATION:
    				stringState = "WAITING_CONNECTION_CONFIRMATION";
    			case CONNECTED_LOCAL_LIST:
    				stringState = "CONNECTED_LOCAL_LIST";
    			case CONNECTED:
    				stringState = "CONNECTED";
    			case P2P_SELECTED:
    				stringState = "P2P_SELECTED";
    			case DOWNLOADING:
    				stringState = "DOWNLOADING";
    			case PDF_SELECTED:
    				stringState = "PDF_SELECTED";
    			case VIEWING:
    				stringState = "VIEWING";
    			case WAITING_DISCONNECTION_CONFIRMATION:
    				stringState = "WAITING_DISCONNECTION_CONFIRMATION";
    		}
     
    		return stringState;
    	}
    il me faudrait quelquechose de vraiment indépendant vis-à-vis des nom de constante qui risque de changer

  5. #5
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Dans un cadre evolutif ou de mise à jour tu pourrais aussi creer un tableau dynamique pour stocker les etats ou un fichier pour les stoker

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Note : il manque des break; dans ton switch.

    Suivant la version que tu as de Java, ce sera beaucoup plus pratique de faire ca avec des enum :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    enum State {
    DISCONNECTED, WAITING_CONNECTION_CONFIRMATION, WAITING_CONNECTION_CONFIRMATION, CONNECTED_LOCAL_LIST, CONNECTED_LOCAL_LIST, CONNECTED, P2P_SELECTED, DOWNLOADING, PDF_SELECTED, VIEWING, WAITING_DISCONNECTION_CONFIRMATION;
    }
    Puisque la method toString() de l'enum retourne directement la chaine correspondante au nom de la variable/valeur, qu'on peut retrouver un entier via la methode ordinal() et que ca marche directement dans un switch.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    State state = ...
     
    String stringState = state.toString();
     
    switch (state) {
      case DISCONNECTED :
         [...]
      break;
      case WAITING_CONNECTION_CONFIRMATION:
         [...]
      break;
      [...]
    }
    Sinon pour decoupler completement le texte a afficher de la valeur il suffit de mettre tout ca dans un fichier de ressources ; par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ResourceBundle bundle = ResourceBundle.getBundle("Labels");
    String stringState = bundle.getString("LABEL_STATE_"+state);
    // Ou qq chose du genre :
    String stringState = bundle.getString("LABEL_STATE_"+state.ordinal());
    Ca peut aussi marche avec tes entiers. Ou tu peux mettre les chaines a afficher dans une Map initialisee statiquement (ou pas) (la aussi ca marche avec tes entiers de maniere similaire), ajouter une methode a l'enum, surcharger toString(), etc... Bref, il y a plein de solutions...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Récupérer le nom d'un champ d'une table
    Par doubiste_59 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/07/2010, 11h32
  2. [AC-2007] Récupérer le nom d'un champ dans une requête SQL
    Par othke dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/03/2010, 18h48
  3. Réponses: 19
    Dernier message: 05/11/2007, 12h11
  4. Comment récupérer le nom d'un champ ?
    Par langela94 dans le forum SQL
    Réponses: 2
    Dernier message: 07/06/2007, 16h23
  5. Récupérer le nom d'un champ pour utilisation dans getElement
    Par effree dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 16h21

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