java8返回单个号码_如何在单个API中支持Java 6、8、9

java8返回单个号码

借助jOOQ 3.7,我们终于添加了对Java 8功能的正式支持。 这为许多不错的改进打开了大门,例如:

创建结果流
try (Stream<Record2<String, String>> stream =
     DSL.using(configuration)
        .select(FIRST_NAME, LAST_NAME)
        .from(PERSON)
        .stream()) {

    List<String> people =
    stream.map(p -> p.value1() + " " + p.value2())
          .collect(Collectors.toList());
}
异步调用语句(jOOQ 3.8+)
CompletionStage<Record> result =
DSL.using(configuration)
   .select(...)
   .from(COMPLEX_TABLE)
   .fetchAsync();

result.thenComposing(r -> ...);

但是显然,我们不想让那些因使用较旧的应用程序服务器而受Java 6困扰的付费客户感到失望。

如何在单个API中支持多个Java版本

这就是为什么我们继续为商业客户发布Java 6版本的jOOQ 。 我们是怎么做的? 非常简单地。 我们的商业代码库(这是我们的主要代码库)包含大量的“标志”,如以下示例所示:

public interface Query 
extends 
    QueryPart, 
    Attachable 
    /* [java-8] */, AutoCloseable /* [/java-8] */ 
{

    int execute() throws DataAccessException;

    /* [java-8] */
    CompletionStage<Integer> executeAsync();
    CompletionStage<Integer> executeAsync(Executor executor);
    /* [/java-8] */

}

(当然, AutoCloseable在Java 7中已经可用,但是我们没有Java 7版本)。

当构建jOOQ时,在使用预处理器从源文件中剥离逻辑之后,我们对其进行了多次构建:

  • 商业Java 8版本是按原样构建的
  • 通过剥离[java-8][/java-8]标记之间的所有代码,构建第二个商业Java 6版本
  • 通过向商业版本添加一些代码来构建商业免费试用版。
  • 通过剥离[pro][/pro]标记之间的所有代码,构建了第三个开源版本

这种方法的优点

与其他方法相比,此方法有几个优点:

  • 我们只有一个事实来源,即原始的商业源代码。
  • 所有不同版本中的行号均相同
  • 这些API在一定程度上是兼容的
  • 通过类加载或反射不会涉及任何魔术

缺点是:

  • 提交到存储库会比较慢,因为我们有几个存储库。
  • 发布版本需要更长的时间,因为需要构建不同的版本并多次测试集成
  • 有时,我们只是忘了添加一个标记,而当Java-6每晚构建崩溃时,我们不得不重新构建
  • 我们仍然不能在Java 6版本(大多数代码)中包含的普通代码中使用lambda表达式。

我们认为,优势明显胜过。 只要我们的客户能够,并且只要那些受困于旧版本的客户仍然能够升级到最新的jOOQ版本,就可以实现一流的Java功能就可以了。

我们期待不影响现有用户的情况下支持JDK 9功能,例如模块化和新的Flow API

你呢?

您如何实现跨JDK版本的兼容性?

翻译自: https://www.javacodegeeks.com/2016/03/support-java-6-8-9-single-api.html

java8返回单个号码

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值