In C e C++ c'e' il preprocessore, e in Java? In Java non c'è. Solitamente il preprocessore in C o C++ si usa per fare una delle seguenti cose:
- definire costanti (vedi nota sotto)
- mettere funzioni inline (vedi nota sotto)
- gestire l'inclusione multipla degli header
- includere selettivamente una parte machine dependent
- attivare o disattivare il debug
Vediamole una per una.
1) Definire costanti
Le costanti si definiscono con la parola chiave final, esempio:public static final double PI = 3,14;2) Mettere funzioni inline Le funzioni inline non si possono mettere in Java. In Java di solito queste ottimizzazioni di basso livello sono lasciate al compilatore e al compilatore JIT. L'unica cosa che si può fare è dichiarare una funzione final.
public static final int sum(int a, int b) {
return a+b;
}
Se il compilatore vuole potrebbe decidere di mettere questa funzione inline, ma non è garantito.
3) Gestire l'inclusione multipla degli header Questo problema in Java non esiste in quanto non ci sono header files.
4) Includere selettivamente una parte machine dependent Il codice machine dependent in Java solitamente viene affrontato nel seguente modo. Si crea una classe astratta neutrale che va bene per tutti i sistemi operativi ma che di fatto evita di implementare i metodi specifici dalla piattoforma. In seguito si crea per ogni piattaforma supportata una classe concreta che estende la classe astratta.
A volte al posto di usare una classe astratta come ancestor comune si utilizza un interfaccia, ma la filosofia è sempre la stessa.
Alcuni esempi di utilizzo di questo pattern sono le classi java.lang.Process e java.io.File della libreria standard.
5) Attivare o disattivare il debug.
L'abilitazione/disabilitazione del debug dipende dal framework di logging che si utilizza. I più famosi sono due:- Java Logging framework
- Log4J
Quello che non si può fare in Java
Come si è visto i problemi affrontati con il preprocessore in C/C++ sono in Java sono risolti in altra maniera. Questo non vuol dire che le soluzioni sono equivalenti. Ad esempio in Java non è possibile escludere una parte del codice dalla compilazione. Non è neanche possibile definire macro.In genere la mancanza di queste caratteristiche non si sente. Se si sente questo potrebbe indicare che Java potrebbe non essere il linguaggio giusto per il problema in esame.
Se uno non può proprio fare a meno del preprocessore in rete ci sono progetti che estendono il linguaggio aggiungendo funzionalità simili. L'adozione di questi strumenti dovrebbe essere fatta responsabilmente perché può portare a dover mantenere codice scritto in un linguaggio Java modificato che quindi diventa meno accessibile perché meno conosciuto.