我知道Java中没有宏,但是有一种解决方法可以做这样的事情:
#ifdef _FOO_FLAG_
import com.x.y.z.Foo;
#else
import com.a.b.c.Foo;
#endif
Run Code Online (Sandbox Code Playgroud)
两个Foo类都有相同的方法.其中一个来自第三方图书馆.我希望能够通过更改单行代码轻松切换到默认库.这可能吗?
编辑:
这两个类都不受我的控制(其中一个来自Android项目的SQLCipher,另一个来自Android SDK).我需要这个,因为SQLCipher库目前在SAMSUNG手机上不起作用.
Joa*_*uer 19
不,Java中没有常用的预处理器(虽然您可以在Java代码上使用C预处理器,但我不鼓励它,因为它会非常不寻常并且会破坏大多数处理代码的工具).这些选择通常在运行时完成,而不是在Java中编译时完成.
通常的Java方法是让两个类实现相同的接口并仅通过接口引用它们:
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();
}
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的(例如,如果至少有一个Foo类不在您的控制之下),那么您可以通过FooWrapper具有两个不同实现(XYZFooWrapper,ABCFooWrapper)的抽象类(或接口)实现相同的效果.
| 归档时间: |
|
| 查看次数: |
12839 次 |
| 最近记录: |