I know there are no macros in Java, but is there a workaround to do something like this:
#ifdef _FOO_FLAG_
import com.x.y.z.Foo;
#else
import com.a.b.c.Foo;
#endif
Both Foo
classes have the same methods. One of them is from a 3rd party library. I want to be able to switch to default library easily by changing a single line of code. Is this possible?
EDIT:
Both classes are out of my control(one of them is from SQLCipher for Android project, other one is from Android SDK). I need this because SQLCipher library doesn't work on SAMSUNG phones at the moment.
No, there is no commonly used pre-processor in Java (although you could use the C preprocessor on your Java code, but I'd discourage it, as it would be very unusual and would break most tools that handle your code). Such selections are usually done at runtime rather than compile-time in Java.
The usual Java-way for this is to have both classes implement the same interface and refer to them via the interface only:
IFoo myFoo;
if (FOO_FLAG) { // possibly a public static final boolean
myFoo = new com.x.y.z.Foo();
} else {
myFoo = new com.a.b.c.Foo();
}
If this is not possible (for example if at least one of the Foo
classes is not under your control), then you can achieve the same effect by an abstract FooWrapper
class (or interface) with two different implementations (XYZFooWrapper
, ABCFooWrapper
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With