java如何做到宏,Java中的宏?

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).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值