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 :

[Language][Constante JAva]Peux-t-on faire plus simple ?


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut [Language][Constante JAva]Peux-t-on faire plus simple ?
    Bonjour à tous,
    Je viens enfin de régler mon problème d'initialisation de constante. Je voudrai avois l'avis des pro de Java pour savoir si ça tient la route ou si c'est complètement débile ou si il y a plus simple.

    Le pb au départ :
    Un fichier d'initialisation ( .properties ) avec différents paramètres : ex : ip=x.x.x.x
    Pouvoir utiliser ces paramètres de façon simple dans toutes mes classes Java. Par exemple coder ce genre de chose : Constante.IP ...

    Voilà ce que j'ai fait :
    La classe Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Main {
     
    	public static void main ( String args[]){
    		new Config();
    		new Constante();
     
    		// exemple d'utilisation de la constante
    		System.out.println(Constante.IP);
    	}
    }
    La classe Config qui charge le fichier properties
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Config {
     
    	static public Properties p = new Properties();
     
    	// Constructeur
    	public  Config() {
    	 	try {
    			Config.p.load(ClassLoader.getSystemResourceAsStream("ex.properties"));
    	 	} catch (IOException e) {
    			 e.printStackTrace();
    		}
    	}
    }
    Et finalement la class Constante avec laquelle je travaille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Constante {
    	// Définition de tte les constantes
    	public final static  String IP = Config.p.getProperty("ip");
     
    }

    J'avais commencé à définir mes constantes dans une interface, mais c'est trop rigide ( d'un côté, c'est aussi normal ... )

    Voilà tout ,
    @+

  2. #2
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Pourquoi définir une constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Définition de tte les constantes 
    public final static  String IP = Config.p.getProperty("ip");
    je ne vois pas l'intérêt...

  3. #3
    Membre habitué Avatar de Kurdran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 122
    Points : 140
    Points
    140
    Par défaut
    Tu peux passer par un seul fichier :
    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
     
    public class Config {
      static private Properties p = new Properties();
     
      public  Config() {
        try {
        Config.p.load(ClassLoader.getSystemResourceAsStream("ex.properties"));
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
     
      public getConstante(String nomConstante) {
        p.getProperty(nomConstante);
      }
    }

  4. #4
    Membre habitué Avatar de Kurdran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 122
    Points : 140
    Points
    140
    Par défaut
    Et du coup c'est moins rigide.

  5. #5
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    juste un petit detail mais qui a de l'importance quand meme.

    un attribut public c'est super moche !!!, alors un attribut de classe, aieaieaie !!!

    Si tu debute prend l'habitude met tout en privé, ca mange peu de pain et sa t'evitera de te faire jetter durement par les anciens...

    Bonne continuation

  6. #6
    Membre habitué Avatar de Kurdran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 122
    Points : 140
    Points
    140
    Par défaut
    Oui c'est vrai j'ai oublier de changer ca quand j'ai fait copier coller

    Voila j'ai change ca.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Bonjour,
    Pour répondre à thibaut :
    Pourquoi définir une constante
    C'était le but que je m'étais fixé. Initialiser un constante. Mais c'est vrai que ce sont plus des paramètres. De là à enlever le final, why not.

    Pour répondre à Kurdan :
    public getConstante(String nomConstante) {
    p.getProperty(nomConstante);
    }
    J'ai refait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	public static String getConstante(String nomConstante) { 
    	  return p.getProperty(nomConstante); 
    	}
    C'est vrai que ça évite la classe Constante. Par contre ds le code, les appels aux constantes seront de la forme suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Config.getConstante("ip"));
    Pour la lisibilité, je préfère des choses du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Config.IP)
    Et pour faire ça, je lui obliger de passer par une 2° classe , c'est pourquoi j'ai utilisé la classe Constante en plus de la classe Config pour écrire Constante.IP.

  8. #8
    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 Ekros
    Pour la lisibilité, je préfère des choses du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Config.IP)
    Et pour faire ça, je lui obliger de passer par une 2° classe , c'est pourquoi j'ai utilisé la classe Constante en plus de la classe Config pour écrire Constante.IP.
    Tu peux très bien utilisé une seule classe, en initialisant tes constantes lors du chargement de la classe Constante par la JVM en utilisant un bloc de code statique :
    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
    public class Constante {
     
    	// Déclaration des constantes SANS affectation :
    	public static final String IP;
     
    	static {
    		// Chargement du fichier properties :
    		Properties p = new Properties();
    		try {
    			p.load(ClassLoader.getSystemResourceAsStream("ex.properties"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
     
    		// Affectation des valeurs des constantes :
    		IP = p.getProperty("ip");
    	}
    }
    a++

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Ca c'est fort !! Je connaissais pas l'utilisation du bloc static ...

  10. #10
    Membre habitué Avatar de Kurdran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 122
    Points : 140
    Points
    140
    Par défaut
    Tiens je ne connaissais pas. Merci.

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Suite du sujet :
    La solution fonctionne bien en mode Stand Alone par contre, si mon fichier properties se retrouve dans une archive war deployée sur un serveur Web, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.load(ClassLoader.getSystemResourceAsStream("ex.properties"));
    me plante. Il y a -il une commande spécifique avec les application web pour retrouver le fichier properties ?

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

Discussions similaires

  1. [ZF 1.11] trié un fetchAll avec les regex, je peux faire plus simple ?
    Par keokaz dans le forum Zend Framework
    Réponses: 10
    Dernier message: 29/07/2011, 20h10
  2. Procédure stockée : comment faire plus simple / plus fiable ?
    Par allaume dans le forum Accès aux données
    Réponses: 1
    Dernier message: 08/08/2007, 12h17
  3. [C#] Impression GDI+, OK mais comment faire plus simple ?
    Par yo2105 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 29/12/2006, 20h29
  4. Comment faire plus simple
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2006, 22h56
  5. Comment faire plus simple
    Par mobscene dans le forum Langage
    Réponses: 5
    Dernier message: 26/07/2005, 04h12

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