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

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

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

相关文章

使用t-sql语句修改表中的某些数据及数据类型。_数据库基本理论详细介绍

1、数据库范式第一范式&#xff1a;列不可分&#xff0c;eg:【联系人】(姓名&#xff0c;性别&#xff0c;电话)&#xff0c;一个联系人有家庭电话和公司电话&#xff0c;那么这种表结构设计就没有达到 1NF&#xff1b;第二范式&#xff1a;有主键&#xff0c;保证完全依赖。eg…

spring-retry_使用Spring-Retry重试处理

spring-retry每当软件组件相互通信时&#xff0c;就有可能出现暂时的自我纠正错误。 这些故障包括服务的暂时不可用&#xff0c;网络连接的瞬时丢失或服务繁忙时出现的超时。 在这种情况下&#xff0c;适当的重试处理可以减少这些故障可能引起的问题。 在这篇文章中&#xff0…

【WebRTC---入门篇】(三)WebRTC运行机制

轨和流 Track 轨&#xff1a;音频轨和视频轨是不相交的 MediaStream 媒体流&#xff1a;中包含多个音视频轨 WebRTC重要类 MediaStream 负责添加N个轨&#xff0c;加入到RTCPeerConnection RTCPeerConnection 核心 RTCDataChannel 非音视频数据&#xff0c;通过RTCP…

a - 数据结构实验之串一:kmp简单应用_【在线教学示范课案例】数据结构(刘航)...

一、教师简介刘航&#xff0c;网络空间安全学院教师&#xff0c;本科生“数据结构”、“算法设计综合实验” 和研究生“算法设计与优化”课程的主讲教师。近年来积极开展了教学与考核模式改革、探究式/研究型课程等课程改革探索&#xff0c;探索课程、学科竞赛和项目相结合的科…

c语言创建字符树,使用C语言构建基本的二叉树数据结构

二叉树结构常用的一些初始化代码#include#includetypedef struct Node{int data;Node *leftchild;Node *rightchild;}Node;/*初始化一棵二叉树排序树。*/void InitBinaryTree(Node**root,int elem){*root(Node*)malloc(sizeof(Node));if(!(*root)){printf("Memory allocat…

可变lambda_Lambda的Lambda(如果可选)

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

【WebRTC---入门篇】(四)WebRTC设备管理

enumerateDevices API用来获取音视频设备 JS使用单线程处理&#xff0c;为了避免阻塞。使用异步调用Promise。handle为处理函数&#xff0c;处理主要逻辑。成功调用resolve&#xff1b;失败调用reject。Promise可以注册两个方法 then(逻辑处理成功会收到on_resolve) 和 catch(…

n阶幻方c语言编程,求单偶阶与双偶阶幻方编程思想及其算法!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #define N 100void oujie(int oushu){int a[N][N]{0},i,j,k1,n,m;noushu/2;m(oushu-2)/4;for(i1,j3*n/2;k<n*n;){if(i<0){ ii3*n; continue; }if(j>3*n){ jj-3*n; continue; }if(j<0){ jj3*n; continue; }if(…

python函数结构_PYTHON 之结构体,全局变量,函数参数,lambda编程 等

PYTHON 之结构体,全局变量,函数参数,lambda编程 ,generator&#xff08;yield&#xff09;使用以及如何自己构建switch结构 *********************** pass pass可以模拟struct结构 class Data pass d Data() d.a 2 d.b 4 print d.a print d.b *********************** 子函数…

【音视频安卓开发 (六)】Android GLSurfaceView播放视频

GLSurfaceView渲染RGB的数据,利用双缓冲空间机制。取出缓冲地址,将要渲染的数据copy到缓冲地址. 获取Surface Java部分&#xff1a; SurfaceView控件设置到界面中显示 SurfaceView定义一个类来实现 package com.example.hello;import android.content.Context; import android…

什么是openstack_您在OpenStack Summit 2016上错过了什么

什么是openstack今年&#xff0c;我第一次参加了4月25日至29日在德克萨斯州奥斯汀举行的OpenStack峰会。 今天结束了&#xff0c;我要回家了&#xff0c;我想回顾一下&#xff0c;从我的角度分享你错过的事情。 作为以应用程序开发人员为重点的技术传播者&#xff0c;转移到包…

python链表实现栈_使用python实现数组、链表、队列、栈

引言 什么是数据结构&#xff1f; 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说&#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如&#xff1a;列表&#xff0c;集合和字典等都是数据结构 N.W…

笛卡尔乘积c语言代码,c# – 高效笛卡尔乘积算法

有人可以向我证明比目前使用的笛卡儿乘积算法更有效(假设有一个)。我已经看了周围的SO和谷歌&#xff0c;但看不到任何明显的东西&#xff0c;所以我可能会缺少一些东西。foreach (int i in is) {foreach (int j in js) {//Pair i and j}}这是我在代码中做的非常简化的版本。两…

【音视频安卓开发 (七)】安卓视频播放窗口去掉标题栏、全屏、横屏

java中的MainActivity初始化部分设置这些操作 //去掉标题栏supportRequestWindowFeature( Window.FEATURE_NO_TITLE);//全屏&#xff0c;隐藏状态getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN ,WindowManager.LayoutParams.FLAG_FULLSCREEN);//屏幕为横屏…

drools6.5_Drools 6.4.0.Final提供

drools6.5最新和最出色的Drools 6.4.0.Final版本现已可供下载。 这是我们先前构建的增量版本&#xff0c;对核心引擎和Web工作台进行了一些改进。 您可以在此处找到更多详细信息&#xff0c;下载和文档&#xff1a; Drools网站 资料下载 文献资料 发行说明 请阅读下面的…

python 统计组合用什么库_Python机器学习需要用到的库

www.oldboyedu.com 老男孩 IT 教育&#xff0c;只培养技术精英 Python 机器学习需要用到的库 Python 是一种面向对象的解释型计算机程序设计语言&#xff0c;具有丰富和强大的 库&#xff0c;再加上其简单、易学、速度快、开源免费、可移植性、可扩展性以及面向对 象的特点&…

c语言编程数学黑洞,一个数学黑洞——6174

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*问题描述&#xff1a;从0-9中任意选取4个不完全相同的数比如&#xff0c;不能是5 5 5 5&#xff0c;可以是1 2 2 2用这4个数排列出最大的数&#xff0c;2221&#xff0c;最小的数1222最大减最小&#xff1a;2221-12220999用0 9 9…

【音视频安卓开发 (八)】OpenSLES播放音频步骤和接口讲解

OpenSLES是安卓内部的音频播放和录音 初始化引擎 创建输出设备 配置PCM格式信息 初始化播放器 播放和缓冲队列 本文开源项目下载

kata_FizzBu​​zz Kata与Java流

kata在柔道练习仅几周之后&#xff0c;我的儿子感到无聊。 他抱怨说自己没有学任何东西&#xff0c;因为他一遍又一遍地做着同样的事情。 混淆学习和做新事物的不仅是幼儿。 例如&#xff0c;有多少软件开发人员通过执行kata或参加dojos来进行刻意练习的麻烦&#xff1f; 重复…