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

Java Discussion :

Equivalent des préprocesseurs du C en Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut Equivalent des préprocesseurs du C en Java
    Bonjour,
    Une simple question, j'aimerai savoir s'il est possible de faire l'équivalent de ce code en Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef DEBUG
       ...
    #else
       ...
    #endif
    en gros, que selon une configuration de compilation, un bout de code change?
    Dois-je forcément gérer ça avec des simples constantes, ou il y a t'il un moyen plus propre?

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    il n'y a pas a ma connaissance de précompilateur ou de compilation conditionnelle en JAVA.
    Une astuce consiste a utiliser des classes statiques permettant d'accéder à des constantes publiques.
    Vous pouvez éventuellement initialiser ces valeurs par un fichier de configuration, ou prendre des arguments depuis une ligne de commande.
    Jetez aussi un coup d'oeil à la classe Properties: http://download.oracle.com/javase/6/...roperties.html, ainsi que la classe Preferences: http://download.oracle.com/javase/6/...eferences.html

    @ bientôt...

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Normalement si tu déclares une champ "private static final <type de base>" et que tu encapsules tes morceaux de code dans un "if" qui teste l'égalité de champ, le compilateur devrait optimiser et ne pas inclure le morceaux de code qui correspond au cas compilé ...

    En pratique
    Le code source original
    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 FooBar
    {
      private static final boolean DEBUG = false;
      public static void main(String[] args)
      {
        if (DEBUG)
        {
           System.out.println("Debugging FooBar");
        }
        System.out.println("Hello World !");
      }
    }
    Ne devrait subsister dans ton bytecode uniquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class FooBar
    {
      private static final boolean DEBUG = false;
      public static void main(String[] args)
      {
        System.out.println("Hello World !");
      }
    }
    A vérifier.

    Si vraiment tu ne veux pas que des morceaux codes apparaissent dans le produit "final", le mieux doit être l'AOP.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #4
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut
    Merci à tous pour vos réponses.
    Je pense que le plus simple reste les constantes statiques; la seule idée que je pensais au départ; je cherchais juste à savoir si il y avait un moyen plus propre (à partir d'une configuration lors de la compilation).

    L'idée de l'utilisation des classes 'Properties' ou 'Preferences' n'est pas du tout approprié, car ici ça concerne des propriétés pour l'utilisateur.

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si tu utilises un script (ex: Ant) pour compiler, tu peux "activer" le mode DEBUG en utilisant du remplacement de chaîne ou l'AOP.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    Je ne vois pas comment on peut utiliser l'AOP dans ce genre de problématique!
    Il n'y a pas de préprocessor en java c'est sûr
    On ne peut pas modéliser un aspect générique sur un morceau de code qui se trouve au milieu du code!

Discussions similaires

  1. Equivalents des Templates de C++ en Java
    Par ToTo13 dans le forum Général Java
    Réponses: 5
    Dernier message: 13/05/2011, 01h35
  2. Equivalent des Java Hashmap en Visual c++
    Par Sallie dans le forum MFC
    Réponses: 10
    Dernier message: 12/05/2006, 10h20
  3. Equivalent des Java Hashmap en c++
    Par Sallie dans le forum C++
    Réponses: 4
    Dernier message: 11/05/2006, 17h58
  4. [C#] Equivalence des API java en C# en ligne
    Par totoranky dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/02/2005, 01h16
  5. Equivalent des SHOW de MySQL
    Par YanK dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/10/2003, 09h15

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