加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中的宏?

发布时间:2020-12-14 05:29:30 所属栏目:Java 来源:网络整理
导读:我知道 Java中没有宏,但是有一个解决方法来做这样的事情: #ifdef _FOO_FLAG_import com.x.y.z.Foo;#elseimport com.a.b.c.Foo;#endif 两个Foo类都有相同的方法.其中一个来自第三方图书馆.我想通过更改单行代码,可以轻松切换到默认库.这可能吗? 编辑: 这两
我知道 Java中没有宏,但是有一个解决方法来做这样的事情:
#ifdef _FOO_FLAG_
import com.x.y.z.Foo;
#else
import com.a.b.c.Foo;
#endif

两个Foo类都有相同的方法.其中一个来自第三方图书馆.我想通过更改单行代码,可以轻松切换到默认库.这可能吗?

编辑:
这两个类都不在我的控制之下(其中一个来自Android项目的SQLCipher,另一个来自Android SDK).我需要这个,因为SQLCipher库目前在SAMSUNG手机上不起作用.

解决方法

不,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();
}

如果这是不可能的(例如,如果至少有一个Foo类不在您的控制之下),那么您可以通过一个抽象的FooWrapper类(或接口)与两个不同的实现(XYZFooWrapper,ABCFooWrapper)实现相同的效果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读