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

借助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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Struts2中通过Ajax传递json数据

1、导入Struts2所需要的jar包 下载Struts2的jar包时&#xff0c;可以下载struts-2.5.13-min-lib.zip&#xff0c;然后放到项目的/WebContent/WEB-INF/lib路径下struts-2.5.13-min-lib只包含以下jar包&#xff1a;   commons-fileupload-1.3.3.jar commons-io-2.5.jar commons…

c语言中 各种括号应成对出现,C语言::验证花括号成对出现

题目要求编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。注意&#xff1a;你不必担心注释内部、字符串常量内部和字符常量形式的花括号。算法分析我们先判断左花括号的数量是否相等。如果左右花括号数量不等,肯定不成对&#xff01;如果左右…

[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

上文&#xff0c;写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具)&#xff0c;本文主要是关于线条的样式设置 lineWidth: 设置线条的宽度&#xff0c;值是一个数值&#xff0c;如lineWidth 5. 画3条不同宽度的线条&am…

在线斯诺克html5,用HTML 5打造斯诺克桌球俱乐部

本文介绍了如何利用HTML5技术来打造一款非常酷的斯诺克桌球游戏&#xff0c;文章中详细地列出了开发的全过程&#xff0c;并解说了实现这个游戏的几个关键点。在文章末尾我向大家提供了游戏的在线实例页面和源码下载链接&#xff0c;如果你只是想玩玩(需要使用支持HTML5的浏览器…

jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

jpa jsfPrimefaces AutoComplete&#xff0c;JSF转换器 这篇文章从第一部分和第二部分继续。 JSF拥有Converter工具&#xff0c;可以帮助我们从用户视图中获取一些数据并将其转换为从数据库或缓存中加载的对象。 在“ com.converter”包中&#xff0c;创建以下类&#xff1a;…

会话保持 (转)

http://www.cnblogs.com/kellyseeme/p/7599061.html 理论部分 会话也就是session&#xff0c;主要存储在服务器端&#xff0c;用来识别用户的身份。 在浏览器中向服务端发送请求的时候&#xff0c;不是http协议就是https协议&#xff0c;而两种协议在发送请求的时候&#xff0c…

html url js编码顺序,前端url编码

为什么要编码&#xff1a;Http协议中参数的传输是"keyvalue"这种简直对形式的&#xff0c;如果要传多个参数就需要用“&”符号对键值对进行分割如"?name1value1&name2value2"&#xff0c;这样在服务端在收到这种字符串的时候&#xff0c;会用“&a…

AWS SQS和Spring JMS集成

Amazon WEB服务为我们提供了SQS消息传递服务。 sqs的java sdk与JMS兼容。 因此&#xff0c;可以将SQS与spring提供的JMS集成框架集成在一起&#xff0c;而不是将SQS用作简单的spring bean。 我将使用spring-boot和gradle。 gradle文件&#xff1a; group com.gkatzioura.sq…

手势相关-解决手势冲突

解决UITableview点击事件与手势的冲突 1.签手势代理 <UIGestureRecognizerDelegate> 2.是tableview点击事件则屏蔽手势 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UIS…

html动画用css还是js,javascript与css3动画结合使用小结

当Html5,css3已渐渐成为主流的时候&#xff0c;我还非常习惯的用js去做一些简单的动画。因为在桌面浏览器上&#xff0c; 并非所有的都支持css3。用户也倒是很奇怪&#xff0c;用户习惯并不是每个用户都可以被培养。总有不少人会觉得win7.win8没xp好用。但手机方面就大不一样了…

洛谷 P3146 [USACO16OPEN]248

P3146 [USACO16OPEN]248 题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves. She is particularly intrigued by the current game she is playing.The g…

java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件

我一直在互联网上搜索如何使用Java将HTML页面转换为PDF文件。我发现了很多指针&#xff0c;简而言之&#xff0c;它们不起作用或难以实现。我也下载了一个商业产品&#xff0c;pdf4ml;该API是我很乐意与之合作的&#xff0c;除了当我在维基百科上检索一个简单的页面时&#xff…

java抽象类和模板模式_测试抽象类和模板方法模式

java抽象类和模板模式摘自Wikipedia&#xff0c;“模板方法定义了算法的程序框架。 子类可以覆盖一个或多个算法步骤&#xff0c;以允许不同的行为&#xff0c;同时确保仍然遵循总体算法。” 通常&#xff0c;此模式由两个或多个类组成&#xff0c;一个是提供模板方法&#xff…

第三章 使用单元测试测试简单的首页

3.1第一个Django应用&#xff0c;第一个单元测试 python3 manage.py startapp lists 创建一个应用 功能测试站在用户的角度从外部测试应用&#xff0c;而单元测试从程序员的角度从内部测试应用 3.2Django中的单元测试 打开新生成的的文件lists/tests.py 注&#xff1a;单元测试…

微型计算机应用领域及应用,自考“微型计算机应用基础”自考大纲(1)

I. 课程性质微型计算机应用基础是高等教育自学考试经济管理类各专业的一门必修的应用基础课程&#xff0c;同时它也适用于文、法、医、农各专业选修。了解计算机这一现代化工具的性能、特点和一般工作原理&#xff0c;掌握计算机基础知识&#xff0c;学会计算机的基本操作&…

Lambda的Lambda(如果可选)

因此&#xff0c;我对JDK 8中Optional接口的两个限制感到沮丧。第一个问题是&#xff0c;没有明显的方法可以在块中执行else操作&#xff0c;因为只有isPresent方法&#xff0c;除非您使用的是老式的if语句。 第二个问题当然是古老的板栗&#xff0c;即使您能够做到&#xff0c…

win7链接html线到屏幕上,为你解决win7系统html文件图标变成空白的具体技巧 - win7吧...

我们经常在电脑上安装应用软件&#xff0c;难免会遇到诸如win7系统html文件图标变成空白的状况&#xff0c;对于大多电脑用户而言&#xff0c;大家几乎都是首次看到win7系统html文件图标变成空白这种状况&#xff0c;其实小编的经验是碰到win7系统html文件图标变成空白的问题别…

周赛。。。。

分糖果 分糖果 题意 要篮子里有不少于 n 块糖果&#xff0c;幼儿园的所有 n 个小朋友&#xff08;包括你自己&#xff09;都从篮子中拿走恰好一块糖&#xff0c;直到篮子里的糖数量少于 n 块。此时篮子里剩余的糖果均归你所有——这些糖果是作为你搬糖果的奖励。 思路 这个程…

计算机科学之前说,国内计算机科学十强大学是哪些?前2名没悬念,后面几所都不好说...

随着科技的发展、产业结构的不断优化&#xff0c;许多单位对计算机相关专业人才需求量越来越大&#xff0c;计算机专业毕业生就业情况普遍不差。加上计算机学科本身就给人一种“格局很高”的感觉&#xff0c;所以该专业成为了当下最热门的专业之一&#xff0c;每年高考都会有一…

服务引用代理类_在代理类中引用动态代理

服务引用代理类在Stackoverflow中有一个有趣的问题 &#xff0c;关于Spring Bean如何获​​得对由Spring创建的代理的引用以处理事务&#xff0c;Spring AOP&#xff0c;缓存&#xff0c;异步流等。需要对代理的引用&#xff0c;因为如果存在对自身的调用通过代理bean&#xff…