Devo essere in grado di stampare in produzione per il logger, ma durante lo sviluppo mi piacerebbe stampare sulla console. Quindi in C++ vorrei semplicemente usare una macro per questo, e quello sarebbe un cambio di 1 linea, come posso farlo in java? Graziecome implementare i macro in java
risposta
Basta definire un metodo statico e chiamarlo. In questo metodo inserisci una costante impostata su true
quando esegui il debug e esegui codice diverso a seconda che tu stia eseguendo il debug o meno.
In generale, scrivere una funzione che legge una proprietà di sistema per sapere dove stampare.
Oppure, per questo caso specifico, utilizzare log4j che consente di specificare elementi come questo in un file di configurazione.
Le macro non sono la risposta giusta, utilizzando un buon quadro di registrazione è. Guarda SLF4J (o il precedente log4j). Se instradi tutte le tue chiamate di registrazione attraverso una di queste facciate, sarai in grado di inviare i tuoi messaggi registrati alla console, o un file, o qualsiasi altro appender che ti piace con un minimo di configurazione.
Java non ha macro C/C++ e quindi non esiste un modo semplice per disattivare automaticamente tutto il codice di registrazione. Che cosa si può fare è qualcosa di simile:
public class Utility {
private Utility() {} // Singleton
public static void log(String toLog) {
System.out.println(toLog);
}
/* ... etc. ... */
}
Ora, in qualsiasi punto del programma che si desidera registrare un evento, si può chiamare
Utility.log("Here's a message!");
Nella produzione si basa, è possibile disattivare questa uscita semplicemente cambiando l'implementazione di log
come no-op.
Questo non è efficiente come il C/C++ - l'unica differenza con cui la macro di registrazione si espande al nulla in fase di compilazione, ma un buon ottimizzatore/JIT dovrebbe essere in grado di notare che l'argomento non viene utilizzato e ottimizzare la logica per impostare tali argomenti.
Java non supporta direttamente un preprocessore e quindi non supporta macro.
La registrazione, tuttavia, è un'esigenza comune, pertanto sono disponibili diverse opzioni. Al momento l'approccio migliore è usare slf4j (dato che i {} -constructs consentono un buon codice), con un backend adatto. Per i principianti il back-end "slf4j-simple" nella distribuzione slf4j è bello.
Si noti che l'autore di slf4j è fortemente favorevole al backend di logback. Per ora, non ne hai bisogno.
La mia risposta è un po 'in ritardo - 4 anni! :)
Ma per la cronologia, se è necessario utilizzare macro, è sufficiente eseguire il preprocessore C++ sul codice Java prima della compilazione. Ovviamente questo presuppone l'utilizzo della sintassi della macro C++.
Se non ricordate quello che fa, il preprocessore solo sostituisce i punti # define'd ...
Detto questo sono d'accordo con quanto sopra - utilizzare un quadro decente (anche se secondo me è un po 'sciocco non avere macro in Java).
- 1. Come implementare una macro generica in C?
- 2. Come implementare una macro in C
- 3. Come implementare i callback in Java
- 4. Come implementare i servizi Web in java
- 5. Come implementare un sistema macro Lisp?
- 6. Come implementare l'accessibilità in java
- 7. Come implementare i timeout del metodo sincrono in Java?
- 8. Come implementare un decoratore wrapper in Java?
- 9. Come implementare un mapping canonico in Java?
- 10. Come testare i macro Scala?
- 11. Come implementare un'interfaccia Java in Clojure
- 12. Come implementare gli indici negativi in java?
- 13. Come implementare l'elenco circolare circolare in java?
- 14. Come implementare i badge?
- 15. come implementare FTP usando java?
- 16. Comprendere come implementare una macro lisp una sola volta
- 17. Come implementare un flusso Java?
- 18. Diversi modi per implementare i DAG in java
- 19. Come implementare i tag in Symfony 2?
- 20. Come implementare i dati temporali in MySQL
- 21. Come implementare i tag post in Mongo?
- 22. Come implementare i numeri binari in Haskell
- 23. Come implementare correttamente i plugin in C#?
- 24. Macro in macro
- 25. Java: come implementare `` toArray` per Collection`
- 26. Come implementare i pagamenti NFC?
- 27. Implementare dizionario utilizzando Java
- 28. come implementare vicino alle partite di stringhe in java?
- 29. Come implementare l'applicazione java web openId?
- 30. Java: come implementare metodi astratti privati?
Sei interessato all'implementazione/utilizzo della registrazione con java o macro? –
Java non ha macro ma ha il vantaggio di essere più dinamico. Significa che puoi disabilitare in modo efficiente qualcosa in fase di esecuzione che dovresti disabilitare al momento della compilazione in C++. Java evita la necessità di compilare molte versioni del codice per attivare e disattivare varie opzioni. Può farlo ottimizzando il codice in base a come viene effettivamente utilizzato. –