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返回单个号码

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

  1. 如何在单个API中支持Java 6、8、9

    借助jOOQ 3.7,我们终于添加了对Java 8功能的正式支持. 这为许多不错的改进打开了大门,例如: 创建结果流 try (Stream<Record2<String, String& ...

  2. react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态

    react 生命挂钩 In this blog post, we are going to learn - 在这篇博客中,我们将学习- What React hooks are什么是React钩子 H ...

  3. java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息

    微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...

  4. java8多线程运行程序_线程,代码和数据–多线程Java程序实际运行的方式

    java8多线程运行程序 有些事情是您在学术或培训班上没有学到的,经过几年的工作经验后才逐渐了解,然后才意识到,这是非常基本的事情,我为什么错过了这么多年. 了解多线程Java程序的执行方式就是其中之 ...

  5. java怎么把数据返回给客户端_将数据从Servlet返回到Java客户端

    您遇到了序列化问题.序列化是将某些数据转换为可以传输的格式的地方.有几种方法可以做到这一点,其他答案中提到了一些方法. 我建议使用JSON作为您的格式.你可以从json.org获得一个很好的Java ...

  6. java序列化深克隆_如何在内存序列化中使用Java深克隆对象

    java序列化深克隆 在我以前的文章中,我解释了深度克隆和浅层克隆之间的区别 , 以及复制构造函数和防御性复制方法比默认的Java克隆如何更好. 使用复制构造函数和防御性复制方法进行的Java对象克隆 ...

  7. java se13安装教程_在Linux发行版中安装Java 13/OpenJDK 13的方法

    本文介绍在Linux发行版Ubuntu 18.04/16.04.Debian 10/9.CentOS 7/8.Fedora 31/30/29中安装Java 13/OpenJDK 13.Java SE ...

  8. eclipse安装maven插件_牛X!Eclipse 开始支持 Java 14~

    随着JDK 14的发布,各大Java IDE也开始支持JDK 14.最新版本的Eclipse IDE 2020-03也于2020年3月18日发布,本文介绍如何通过Eclipse IDE来开发Java ...

  9. java scala 获取类_在Scala 2.10中获取java.lang.Class [T]的Scala类型

    您可以像这样实现您的方法: def getType[T](clazz: Class[T])(implicit runtimeMirror: ru.Mirror) = runtimeMirror.cla ...

最新文章

  1. linux系统基础入门,虚惊一场
  2. java反射--Class类
  3. centos mysql导出数据库命令_在centos(linux)下用命令导出mysql数据库数据
  4. Python中用numpy进行图片处理
  5. python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
  6. 被问到一个简单的脚本后
  7. 高等数学18讲(19版)反常积分的计算与敛散性判别
  8. 使用Tor以加密方式发送BCH
  9. 痛苦的evo安装之旅,终于成功了
  10. 深信服连接openldap_深信服AC结合第三方服务器AD域认证
  11. 广度搜索与深度搜索的区别
  12. python判断阶乘和数_python如何计算数的阶乘
  13. 10款非常实用的在线网站原型设计工具
  14. 电子技术——伪NMOS逻辑电路
  15. 关于谷歌浏览器无法正常上传图片的问题
  16. 联通云服务器如何开放端口
  17. Android避坑指南,Gson与Kotlin碰撞出一个不安全的操作
  18. Hi,运维,你懂Java吗-No.2:JDK介绍及安装
  19. C#中IndexOf的用法
  20. Java分割字符串,分割逗号字符串,分割空格

热门文章

  1. CF1153F-Serval and Bonus Problem【dp,数学期望】
  2. AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】
  3. ssl提高组周六备考赛【2018.10.27】
  4. Codeforces Round #675 (Div. 2)——F主席树待补?
  5. 纪中A组模拟赛总结(2021.7.15)
  6. 一些来自STL的好东西
  7. NEERC2017 Archery Tournament 线段树 新套路
  8. Dubbo(四)之xml配置方式
  9. Java IO: 并发IO
  10. 使用cardme读写VCard文件,实现批量导入导出电话簿