2012-07-02 21 views
12

cómo hacer que las importaciones condicionales en Java como el que tenemos la ifdefs en C Esto es lo que pretendo lograrJava importaciones condicionales

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

Posible subconjunto de: http://stackoverflow.com/questions/4526113/java-conditional-compilation-how-to-prevent-code-chunks-to-be-compiled –

Respuesta

13

Usted no tiene la importación condicional con java

Pero podría utilizar condicionalmente diferentes clases con el mismo nombre que utilizan nombre completo

por ejemplo:

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

Esto solo sería realmente beneficioso si ambos Dates implementó una interfaz común. – gdw2

+0

Decir si ambas bibliotecas son JAR externas. ¿El compilador incluiría ambos JAR en el código compilado si 'useSql' fuera' estático final'? –

+0

Sí. va a. sin embargo, todavía debe proporcionarlo durante el tiempo de ejecución –

2

No tenemos la importación condicional en Java

0

Java does't apoyo condicional import.

2

No hay soporte para esto en Java.
Ten en cuenta que #IFDEF se realiza en la etapa de preprocesador en C++ - No hay soporte en Java para eso.
Lo que puedes probar y tener es algo así como un procesador de anotaciones, antes de que se introdujeran las anotaciones en JDK 1.5.
Además, puede usar las anotaciones para procesarlas durante el tiempo de compilación.
This blog le proporciona algo de información

0

Lo que está tratando de hacer es una idea válida, pero debería usar simulaciones en su lugar. Mockito es una gran biblioteca para eso.

El paradigma es un poco diferente, pero debe examinar las pruebas de unidad con una biblioteca burlona y comprender eso, lo que le permitirá hacer lo que está intentando, de una mejor manera (en mi opinión) .

0

Java Comment Preprocessor apoya secciones prefijo y de sufijo en el documento resultado y es muy útil para formar sección de importación de clase, puede colocar la cadena de importación, aun en medio de su clase

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

Se puede usar un tradicional si declaración y luego, en lugar de importar, haga Class.forName("example.ExampleClass") que devolvería un objeto Class que podría invocar Class.newInstance() en adelante. Le permitiría evitar los errores de tiempo de compilación para las dependencias que pueden no existir y hacer algo similar a la importación condicional.