2012-07-02 16 views
12

Come avere le importazioni condizionali in Java come abbiamo la ifdefs in C Questo è quello che ho intenzione di realizzareJava importazioni condizionali

ifdef TEST 
import com.google.mystubs.swing; 
elif 
import javax.swing.*; 
endif 
+0

Possibile sottoinsieme di: http://stackoverflow.com/questions/4526113/java-conditional-compilation-how-to-prevent-code-chunks-to-be-compiled –

risposta

13

Non dovete importazione condizionale con Java

Ma voi potrebbe condizionatamente usare classi differenti con lo stesso nome utilizzando nome completo

ad esempio:

if(useSql){ 
    java.sql.Date date = new java.sql.Date() 
}else{ 
    java.util.Date date = new java.util.Date() 
} 
+2

Questo sarebbe davvero di beneficio se entrambi Le date hanno implementato un'interfaccia comune. – gdw2

+0

Dire se entrambe le librerie erano JAR esterni. Il compilatore includerebbe entrambi quei JAR nel codice compilato se 'useSql' era' static final'? –

+0

Sì. lo farà. tuttavia è comunque necessario fornirlo durante il runtime –

2

Non abbiamo l'importazione condizionale in java

0

Java Non supporta il condizionale import.

2

Non c'è supporto per questo in Java.
Ricorda che #IFDEF viene eseguito in fase di pre-processore in C++ - Nessun supporto in Java per questo.
Quello che puoi provare e avere è qualcosa come un processore di annotazioni, prima che le annotazioni dei giorni fossero introdotte in JDK 1.5.
Inoltre, è possibile utilizzare le annotazioni per essere elaborate durante la compilazione.
This blog fornisce alcune informazioni

0

Quello che stai cercando di fare è un'idea valida, ma si dovrebbe usare mazze invece. Mockito è una grande libreria per questo.

Il paradigma è un po 'diverso, ma dovresti esaminare i test unitari con una libreria di derisione e ottenere una comprensione di ciò che ti consentirà di fare ciò che stai cercando, in un modo migliore (secondo me) .

0

Java Comment Preprocessor supporta sezioni prefisso e suffisso nel documento risultato ed è molto utile per formare sezione di classe di importazione, è possibile inserire import string anche nel bel mezzo della classe

//#ifdef FLAG 
//+prefix 
import some.class.Clazz; 
//-prefix 
    Clazz.call(); 
//#endif 
0

Si potrebbe utilizzare una tradizionale if e quindi invece di importare fare Class.forName("example.ExampleClass") Ciò restituirebbe un oggetto Class che è possibile quindi richiamare Class.newInstance() su. Ti permetterebbe di evitare errori di compilazione per dipendenze che potrebbero non esistere e fare qualcosa di simile all'importazione condizionale.