Necesito poder imprimir en producción al registrador, pero durante el desarrollo me gustaría imprimir en la consola. Entonces en C++ simplemente usaría una macro para eso, y eso sería un cambio de 1 línea, ¿cómo puedo hacer eso en java? Graciascómo implementar macros en java
Respuesta
Simplemente defina un método estático y llámelo. En ese método, ponga una constante que esté configurada en true
cuando está depurando y ejecute código diferente dependiendo de si está depurando o no.
En general, escriba una función que lea una propiedad del sistema para saber dónde imprimir.
O, para este caso específico, use log4j que le permite especificar cosas como esta en un archivo de configuración.
Las macros no son la respuesta correcta, utilizando un buen marco de registro es. Mire SLF4J (o el anterior log4j). Si enrutas todas tus llamadas de registro a través de una de estas fachadas, podrás enviar tus mensajes registrados a la consola, o un archivo, o cualquier otro apéndice que quieras con un poco de configuración.
Java no tiene macros similares a C/C++, por lo que no hay una manera fácil de desactivar automáticamente todo su código de registro. Lo que puede hacer es algo como esto:
public class Utility {
private Utility() {} // Singleton
public static void log(String toLog) {
System.out.println(toLog);
}
/* ... etc. ... */
}
Ahora, en cualquier parte del programa que desea registrar un evento, sólo puede llamar a
Utility.log("Here's a message!");
En la producción crece, puede silenciar esta salida simplemente cambiando la implementación de log
para que no funcione.
Esto no es tan eficiente como el C/C++ - ismo de tener su macro de registro expandirse a la nada en tiempo de compilación, pero un buen optimizador/JIT debería ser capaz de notar que el argumento no se está usando y Optimice la lógica para configurar esos argumentos.
Java no admite directamente un preprocesador y, por lo tanto, no admite macros.
El registro, sin embargo, es una necesidad común, por lo que hay varias opciones para elegir. Por el momento, lo mejor es usar slf4j (ya que las {} -construcciones permiten un buen código), con un back-end adecuado. Para empezar, el backend "slf4j-simple" en la distribución slf4j es agradable.
Tenga en cuenta que el autor slf4j favorece fuertemente el back-end de logback. Por ahora, no necesitas eso.
Mi respuesta es un poco tarde - ¡4 años! :)
Pero solo para el registro, si debe usar macros simplemente ejecute el preprocesador de C++ sobre el código de Java antes de compilar. Por supuesto, esto supone que utiliza la sintaxis de macro C++.
Si usted no recuerda lo que hace esto, el preprocesador simplemente sustituye los puntos #define ...
Dicho esto estoy de acuerdo con lo anterior - utilizar un marco decente (aunque en mi humilde opinión es un poco tonto no tener macros en Java).
- 1. Cómo llamar a Clojure Macros desde Java?
- 2. macros en macros
- 3. Cómo implementar callbacks en Java
- 4. Cómo implementar OpenID en Java
- 5. Implementar OAuth en Java
- 6. cómo implementar FTP usando java?
- 7. Cómo implementar un pliegue lista en Java
- 8. Cómo implementar servicios web en java
- 9. Cómo implementar contador de objetos en Java
- 10. ¿Cómo implementar la aplicación web openId java?
- 11. Java: ¿cómo implementar métodos abstractos privados?
- 12. Java: cómo implementar `` toArray` para Collection`
- 13. Implementar diccionario utilizando Java
- 14. Implementar aplicación web Java simple en Appfog
- 15. (emulado) ¿Macros en Haskell?
- 16. # y ## en macros
- 17. : = vs = en macros maquillaje
- 18. ¿Cómo puedo simular macros en JavaScript?
- 19. Cómo establecer macros predefinidas en Code :: Blocks
- 20. cómo implementar SAML sso usando Java, Java EE
- 21. Al utilizar macros tipo función en C
- 22. Evaluación Clojure de macros
- 23. DocBook macros?
- 24. ¿Cómo implementar la interfaz Java anónimamente en scala?
- 25. ¿Cómo implementar un ticker (contador) circular concurrente en Java?
- 26. Cómo implementar un conversor de unidades en java
- 27. ¿Cómo implementar una asignación de canonicalización en Java?
- 28. ¿Cómo implementar un SQL como el operador 'LIKE' en java?
- 29. ¿Cómo implementar correctamente MVC en Java con Swing?
- 30. Aplicación web Java: ¿cómo implementar técnicas de almacenamiento en caché?
¿Está interesado en implementar/usar el registro con java o macros? –
Java no tiene macros, pero tiene la ventaja de ser más dinámico. Significa que puede desactivar de manera eficiente algo en tiempo de ejecución que debería deshabilitar en tiempo de compilación en C++. Java evita la necesidad de compilar muchas versiones de código para activar y desactivar varias opciones. Puede hacerlo optimizando el código según cómo se usa realmente. –