不要被泛型和向后兼容性所愚弄。 使用泛型类型

最近,我与jOOQ的早期客户Ergon的 Sebastian Gruber进行了非常有趣的讨论,我们与之保持了密切联系。 与Sebastian交谈使我们的工程团队得出结论,认为我们应该完全重写jOOQ API。 现在,我们已经有很多用于各种用途的泛型,例如

  • 列类型的泛型,例如
    interface Field<T> { ... }
    Field<String> field = BOOK.TITLE;
  • 表类型的泛型,例如
    interface Table<R extends Record> { ... }
    Table<BookRecord> books = BOOK;
  • 同时使用<T><R>组合泛型
  • … 以及更多

有时,您只是无法预测两年后您的类和接口将需要多少种通用类型,而Java的问题是:您只能一次生成一个类。 假设您一直都有这样的类型:

class Foo {}

现在您知道,您需要两个泛型类型参数现在

// Still compatible
class Foo<Bar, Baz> {}

这样就可以了,所有现有的客户端代码仍将编译,并带有原始类型警告。 但是,一旦发布了Foo<Bar, Baz> ,就不能再向其中添加或删除类型变量。 每次修改都会破坏客户端代码!

// Breaking change
class Foo<Bar, Baz, Fizz> {}

解决方案:泛型类型

我们不想给我们的客户带来负担,这是向后不兼容的沉重负担。 这就是为什么我们现在发布具有新功能的下一个jOOQ版本 ,我们称之为泛型泛型类型 。 它是如何工作的? 这简单。 我们从最好的数据库设计人员那里学习,他们一直以来都在使用通用列类型。 在SQL中,如果遇到这种问题,您只需写:

CREATE TABLE foo (bar int,baz int,fizz int,generic_1 varchar(4000),generic_2 varchar(4000),generic_3 varchar(4000),generic_4 varchar(4000),-- [...]
);

现在,您的SQL模式在以后的时代都是安全的。 我们将在Java中执行相同的操作:

class Foo<Bar, Baz, Fizz,Generic1,Generic2,Generic3,Generic4,// [...]
> {}

因此,我们将所有类型泛型化为具有256个泛型类型参数。 256是MS Access为可能的列数选择的明智限制。 这样,我们的客户只需要一次升级到新版本的jOOQ,从那时起,将永远保证通用类型的向后兼容性。

编码愉快!

翻译自: https://www.javacodegeeks.com/2015/04/dont-be-fooled-by-generics-and-backwards-compatibility-use-generic-generic-types.html

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

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

相关文章

java 什么是耦合_什么是耦合、解耦

什么是耦合、解耦一、耦合1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。2、在软件工程中&#xff0c;对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高&#xff0c;维护成本越高&#xff0c;因此对象的设计应使类和构…

基于SharePoint 的企业信息平台架构

转载于:https://www.cnblogs.com/jackljf/p/3589224.html

java bufferarray_Java中的ByteBuffer array()方法

可以使用array()类java.nio.ByteBuffer中的方法获得缓冲区的字节数组。如果返回的数组被修改&#xff0c;则缓冲区的内容也会被类似地修改&#xff0c;反之亦然。如果缓冲区是只读的&#xff0c;则抛出ReadOnlyBufferException。演示此的程序如下所示-示例import java.nio.*;im…

java freemarker 分页_10小时入门java开发04 springboot+freemarker+bootstrap快速实现分页功能...

本节是建立在上节的基础上&#xff0c;上一节给大家讲了管理后台表格如何展示数据&#xff0c;但是当我们的数据比较多的时候我们就需要做分页处理了。这一节给大家讲解如何实现表格数据的分页显示。准备工作还是老规矩&#xff0c;看效果图可以看出我们实现了如下功能1&#x…

获取linux服务器基本信息脚本

为了方便日常运维写的一段简单脚本&#xff0c;用于集中获取服务器操作系统、CPU、内存使用、负载、硬盘使用、网络信息。 脚本比较简单&#xff0c;就不解释了&#xff0c;有兴趣的朋友请自行查看。 #!/bin/bash##Name:system_info#Ver:1.0#Author:lykyl###程序说明:#获取服务…

您认为有关垃圾收集的7件事-完全错了

关于Java垃圾收集的最大误解是什么&#xff0c;它的真实情况如何&#xff1f; 小时候&#xff0c;我的父母曾经告诉我&#xff0c;如果我学习不好&#xff0c;我将成为垃圾收集者。 他们所知道的很少&#xff0c;垃圾回收实际上很棒。 也许这就是为什么即使在Java世界中&#…

java $p_javap -c命令详解

一直在学习Java,碰到了很多问题&#xff0c;碰到了很多关于i和i的难题&#xff0c;以及最经典的String str "abc" 共创建了几个对象的疑难杂症。 知道有一日知道了java的反汇编 命令 javap。现将学习记录做一小结&#xff0c;以供自己以后翻看。如果有错误的地方&a…

hibernate 映射四多对一双向映射

学生和班级的例子来说&#xff0c;多个学生可以对应一个班级。 1.站在学生角度来说&#xff0c;学生就是多端。那么我们可以通过多对一来维护2者的关系。 2.站在班级的角度来说&#xff0c;班级就是一端。那么我们可以通过一对多啦维护2者的关系。 3.我们也可以双向关联两者的关…

JS factory

http://my.oschina.net/jbryan/blog/140647转载于:https://www.cnblogs.com/zhongqiu/p/3472472.html

django mysql 表单_Python Django 表单提交数据到mysql并展示

首先1&#xff1a; 新建项目userproject&#xff0c; 新建应用childName2&#xff1a; 这是childName文件目录&#xff0c;templates文件夹放insert.html 与 show.html3&#xff1a; insert.html 与 show.html/**insert.html**/用户登录12345678910111213141516Title信息展示用…

java h5 上拉加载更多_移动端H5页面上拉加载更多功能实现(二)

之前已经写过一篇关于上拉加载更多的文章&#xff0c;那个主要是根据滚动实现分页向后台发起请求实现。这次实现方式为后台返回所有需要加载的数据&#xff0c;前端这边做视觉上的分页效果。实现原理也是根据滚动距离触发加载更多的条件。我这边的需求是需要在模态框里实现一个…

体验最火的敏捷——SCRUM(厦门,2014.1.4)

1.概述SCRUM是当前最火的一种敏捷开发方法&#xff0c;有用户故事、冲刺、燃尽图等很多很酷的玩法&#xff0c;有牛B的产品负责人、SCRUM Master&#xff0c;有超强的自组织团队。本沙龙将为您展现当前最火最酷的敏捷开发方法&#xff01;内容大纲&#xff1a;1)SCRUM是神马东西…

摆脱困境:将属性值注入配置Bean

Spring Framework对将从属性文件中找到的属性值注入到bean或Configuration类中提供了很好的支持。 但是&#xff0c;如果将单个属性值注入这些类中&#xff0c;则会遇到一些问题。 这篇博客文章指出了这些问题&#xff0c;并描述了我们如何解决它们。 让我们开始吧。 如果使…

js编码java解码_js编码

虽然escape()、encodeURI()、encodeURIComponent()三种方法都能对一些影响URL完整性的特殊字符进行过滤。但后两者是将字符串转换为UTF-8的方式来传输&#xff0c;解决了页面编码不一至导致的乱码问题。例如&#xff1a;发送页与接受页的编码格式(Charset)不一致(假设发送页面是…

淘宝IP地址查询

官方网址&#xff1a;http://ip.taobao.com/index.php 相关文章&#xff1a; http://www.cnblogs.com/zetee/p/3482085.html http://www.cnblogs.com/zetee/p/3481297.html转载于:https://www.cnblogs.com/AloneSword/p/3483176.html

mysql查询各专业人数_查询各专业的学生数。

【简答题】查询“数据库”不及格的学生的学号和成绩。【判断题】螺位错可以攀移。【单选题】Internet 的核心协议是()【单选题】多媒体计算机是指()【单选题】码组10100与10001之间的码距为( )。【简答题】查询选修了“计算机基础”课程的学生学号和成绩。【单选题】小强用数码…

[SharePoint][SharePoint2013循序渐进]SPS2013简介

本章概要&#xff1a; 1、啥是SPS2013 2、SharePoint如何作用于团队协作和信息共享 3、SP2013有哪些用户权限 4、什么是SharePoint2013 online 5、SP在内部署和在线订阅计划的区别 6、office集成 7、与Microsoft Dynamics AX集成提供一个web前端界面 【什么是SharePoint2013】 …

python怎么改目录_如何查看文件,而不是使用Python进行更改的目录?

问题&#xff1a;How do I watch a file for changes using Python?建议使用看门狗,但我发现它只能观看目录,而不是文件.watchdog-test.py是看门狗的示例脚本&#xff1a;$python watchdog-test.py ab_test_res.sh &[1] 30628fbtfbt64:~/laike9m$Traceback (most recent c…

javascript arguments

此文为转载文章&#xff1a; 什么是arguments arguments 是是JavaScript里的一个内置对象&#xff0c;它很古怪&#xff0c;也经常被人所忽视&#xff0c;但实际上是很重要的。所有主要的js函数库都利用了arguments对象。所以agruments对象对于javascript程序员来说是必需熟悉的…

hutool 自定义excel_Hutool Java 工具类库导出 Excel,超级简单!

前言在开发应用系统的时候&#xff0c;导出文件是必不可放的功能。以前用过POI、easyexcel等工具的导入导出功能&#xff0c;但总感觉太麻烦了&#xff0c;代码特别多&#xff0c;感觉并不是很好用。今天给大家介绍一款新工具&#xff0c;java工具类库Hutool。Hutool简介Hutool…