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返回单个号码
java8返回单个号码_如何在单个API中支持Java 6、8、9相关推荐
- 如何在单个API中支持Java 6、8、9
借助jOOQ 3.7,我们终于添加了对Java 8功能的正式支持. 这为许多不错的改进打开了大门,例如: 创建结果流 try (Stream<Record2<String, String& ...
- react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态
react 生命挂钩 In this blog post, we are going to learn - 在这篇博客中,我们将学习- What React hooks are什么是React钩子 H ...
- java读取微信消息_微信公众平台开发中使用Java如何实现获取用户的信息
微信公众平台开发中使用Java如何实现获取用户的信息 发布时间:2020-11-18 15:09:28 来源:亿速云 阅读:93 作者:Leah 本篇文章为大家展示了微信公众平台开发中使用Java如何 ...
- java8多线程运行程序_线程,代码和数据–多线程Java程序实际运行的方式
java8多线程运行程序 有些事情是您在学术或培训班上没有学到的,经过几年的工作经验后才逐渐了解,然后才意识到,这是非常基本的事情,我为什么错过了这么多年. 了解多线程Java程序的执行方式就是其中之 ...
- java怎么把数据返回给客户端_将数据从Servlet返回到Java客户端
您遇到了序列化问题.序列化是将某些数据转换为可以传输的格式的地方.有几种方法可以做到这一点,其他答案中提到了一些方法. 我建议使用JSON作为您的格式.你可以从json.org获得一个很好的Java ...
- java序列化深克隆_如何在内存序列化中使用Java深克隆对象
java序列化深克隆 在我以前的文章中,我解释了深度克隆和浅层克隆之间的区别 , 以及复制构造函数和防御性复制方法比默认的Java克隆如何更好. 使用复制构造函数和防御性复制方法进行的Java对象克隆 ...
- 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 ...
- eclipse安装maven插件_牛X!Eclipse 开始支持 Java 14~
随着JDK 14的发布,各大Java IDE也开始支持JDK 14.最新版本的Eclipse IDE 2020-03也于2020年3月18日发布,本文介绍如何通过Eclipse IDE来开发Java ...
- java scala 获取类_在Scala 2.10中获取java.lang.Class [T]的Scala类型
您可以像这样实现您的方法: def getType[T](clazz: Class[T])(implicit runtimeMirror: ru.Mirror) = runtimeMirror.cla ...
最新文章
- linux系统基础入门,虚惊一场
- java反射--Class类
- centos mysql导出数据库命令_在centos(linux)下用命令导出mysql数据库数据
- Python中用numpy进行图片处理
- python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
- 被问到一个简单的脚本后
- 高等数学18讲(19版)反常积分的计算与敛散性判别
- 使用Tor以加密方式发送BCH
- 痛苦的evo安装之旅,终于成功了
- 深信服连接openldap_深信服AC结合第三方服务器AD域认证
- 广度搜索与深度搜索的区别
- python判断阶乘和数_python如何计算数的阶乘
- 10款非常实用的在线网站原型设计工具
- 电子技术——伪NMOS逻辑电路
- 关于谷歌浏览器无法正常上传图片的问题
- 联通云服务器如何开放端口
- Android避坑指南,Gson与Kotlin碰撞出一个不安全的操作
- Hi,运维,你懂Java吗-No.2:JDK介绍及安装
- C#中IndexOf的用法
- Java分割字符串,分割逗号字符串,分割空格
热门文章
- CF1153F-Serval and Bonus Problem【dp,数学期望】
- AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】
- ssl提高组周六备考赛【2018.10.27】
- Codeforces Round #675 (Div. 2)——F主席树待补?
- 纪中A组模拟赛总结(2021.7.15)
- 一些来自STL的好东西
- NEERC2017 Archery Tournament 线段树 新套路
- Dubbo(四)之xml配置方式
- Java IO: 并发IO
- 使用cardme读写VCard文件,实现批量导入导出电话簿