comment mettre en œuvre des macros en java
J'ai besoin d'être en mesure d'imprimer de la production, enregistreur, mais tout en développant je voudrais imprimer à la console. Donc, en c++, je voudrais simplement utiliser une macro pour elle, et ce serait un changement de 1 ligne, comment puis-je le faire en java?
Grâce
- Êtes-vous intéressé par la mise en place, à l'aide de l'enregistrement à l'aide de java, ou des macros?
- Java n'a pas de macros, mais n'ont l'avantage d'être plus dynamique. Cela signifie que vous pouvez efficacement désactiver quelque chose au moment de l'exécution que vous devez désactiver au moment de la compilation en C++. Java permet d'éviter de devoir compiler beaucoup de versions de code pour activer les différentes options de sous et hors tension. Il peut le faire par l'optimisation du code sur la base de la façon dont il est réellement utilisé.
Vous devez vous connecter pour publier un commentaire.
Les Macros ne sont pas la bonne réponse, à l'aide d'un bon de journalisation est. Regardez SLF4J (ou les plus vieux log4j). Si vous faites passer à tous vos journalisation des appels par le biais de l'une de ces façades, vous serez en mesure d'envoyer vos messages consignés à la console, ou un fichier, ou tout autre appender que vous aimez avec un peu de config.
Java n'a pas de C/C++-comme les macros, et donc il n'y a pas de moyen facile de désactiver automatiquement l'ensemble de votre code d'enregistrement. Ce que vous pouvez faire est quelque chose comme ceci:
Maintenant, n'importe où dans votre programme que vous voulez enregistrer un événement, vous pouvez les appeler
Dans la production de construit, vous pouvez le silence de cette sortie en changeant simplement la mise en œuvre de
log
d'être un no-op.Ce n'est pas aussi efficace que le C/C++-ism d'avoir juste votre enregistrement macro étendre à néant au moment de la compilation, mais une bonne optimizer/équipe doit être en mesure d'avis que l'argument n'est pas de s'habituer et d'optimiser loin la logique de définir jusqu'à ces arguments.
Regarder http://logging.apache.org/log4j/index.html ou http://www.slf4j.org/download.html
Il suffit de définir une méthode statique et de l'appeler. Dans cette méthode de mettre une constante qui est mis à
true
lorsque vous déboguez et d'exécuter un code différent selon que vous êtes le débogage ou pas.En général, écrire une fonction qui lit un système de propriété à savoir où les imprimer.
Ou, pour ce cas précis, l'utilisation de log4j, qui permet de spécifier des trucs comme ça dans un fichier de config.
Java n'est pas directement en charge d'un pré-processeur et par conséquent ne prend pas en charge les macros.
De journalisation, cependant, est un besoin commun donc, il ya plusieurs options à choisir à partir. Pour le moment, la meilleure approche est d'utiliser slf4j (comme les {}-les constructions de permettre le bon code), avec un backend. Pour commencer, le "slf4j-simple" backend dans le slf4j distribution est agréable.
Noter que le slf4j auteur préfère le logback backend. Pour l'instant, vous n'avez pas besoin de cela.
Ma réponse est un peu tardive - de 4 ans! 🙂
Mais juste pour le record, si vous devez utiliser des macros il suffit d'exécuter le préprocesseur C++ sur le code Java avant de compiler. Bien sûr, cela suppose que vous utilisez le C++ macro-syntaxe.
Si vous ne vous rappelez pas ce que cela fait, le préprocesseur remplace simplement #define avais éléments...
Cela dit je suis d'accord avec ce qui précède - utiliser un décent cadre (même si à mon humble avis il est un peu idiot de ne pas avoir de macros en Java).