最近几个月,有一些与“ Java数据类”(又称为“记录”)有关的更新。 正如我在“ JavaFX,Valhalla,数据类和Java的浮点更新 ”一文中简短提到的那样, Brian Goetz的“ Java数据类 ”“探讨了Java语言中数据类的可能方向。” 令人遗憾的是,尽管在OpenJDK邮件列表上对这一潜在的新Java功能进行了广泛的讨论,但该文档还指出:“这只是一个探索性文档,并不构成Java语言任何特定版本中任何特定功能的计划。”

3月中旬,Goetz在琥珀色专家邮件列表中发布了一条消息,标题为“ 记录-当前状态” 。 他在该消息中指出了Java记录的意图:“我们一直以来的目标是将记录定义为一组更细粒度的功能的'纯宏'。 其中一些是由样板驱动的。 有些是由语义(将API元素的语义耦合到状态)驱动的。通常,记录将首先到达那里,然后普通的类将具有更通用的功能。”

“ 记录-当前状态 ”一文中提出了一些有趣的观点,但在这里我将重点介绍一些我发现特别有趣的观点。 通常,在陈述的早期设计决策中可以看到,与创建Java相比,现在普遍流行的通用原则主导着与记录有关的思维。

在“可变性和可访问性”部分中,Goetz建议Java记录提供final字段,这些字段是“默认情况下为打包( protected抽象记录protected )的软件包”,但允许开发人员“明确选择退出(非最终)”,因为并允许“明确扩展(公开)访问范围”。 我喜欢的有Java结构的想法final默认领域,并具有明确选择,使他们非final ,而不是周围的其他方式,我们已经成为在Java中使用。

Goetz在“访问器”部分中写道,当前的想法是让这些访问器方法不使用JavaBeans的“ get”约定,而使用不带“ get”前缀的字段名称。 他写道:“显而易见的选择是自动公开读取访问器。 (这些将不会被命名为getXxx;无论人们已经考虑了多少,我们都不会将不明智的Javabean命名约定烧入该语言。)这些访问器的明显命名选择是fieldName()。” 我喜欢遵循此简单命名约定(在编写builder时倾向于使用)自动生成的读取访问器的想法。 我还赞赏强调的保证,即没有阴谋或努力将“不明智的JavaBean命名约定烧入该语言中”。

Goetz的“核心方法”部分讨论了诸如equals(Object)hashCode()toString()等通用方法。 Goetz写道:“记录将获得equals,hashCode和toString”,并且“将equals / hashCode最终定为一个好参数。” 他补充说,虽然无需将toString()final方法,但可以将自动生成的读取访问器方法设置为final

Stephen Colebourne在有关Java中的记录/数据类的邮件列表讨论中贡献了多个帖子。 这些包括他在Amber上发表的见解 (该项目包括这项工作以及其他工作,例如LVTI和原始字符串文字 )以及对先前提到的原始“ Records-current status ”消息的回应 。

关于Java记录的其他相对较新的邮件列表消息包括Goetz的“ 记录:构造和验证” ,由Remi Forax发起的“ 记录和注释值 ”讨论,以及由Gunnar Morling发起的名为“ Records- 将它们用作JPA实体”的主题。并使用Bean验证对其进行验证 。”

尽管Records / Data Classs尚未与任何特定的Java版本相关联,但令人激动的是,思考它们可能带来的使更好,更安全和可读性更好的Java代码的可能性。

翻译自: https://www.javacodegeeks.com/2018/05/updates-on-records-data-classes-for-java.html

记录更新(Java数据类)相关推荐

  1. 使用Mutability Detector对Java数据类的不变性进行单元测试

    在我们所有的项目中,我们使用的数据类根据定义包含数据(字段),但不包含(业务)逻辑. 根据最佳编码实践,数据类最好应该是不可变的,因为不可变性意味着线程安全. 这里的主要参考是Joshua Bloch ...

  2. 总结java数据类型和mysql、oracle、pgsql数据类型对应关系,附数据库字段类型转java类型代码

    java的基本数据类型有八种: byte.short.int.long.float.double.char.boolean 总结java和mysql.oracle.pgsql数据类型对应关系 java ...

  3. 学习记录466@Java Calender类、TimeUnit类以及 ScheduledExecutorService实现定时任务

    为什么要将Calender.TimeUnit与ScheduledExecutorService一起记录呢,因为ScheduledExecutorService实现定时任务需要用到Calender.Ti ...

  4. Java数据类型和MySql数据类型对应表

    java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CH ...

  5. python 数据类_python数据类

    前言 之前有写过一篇python元类的笔记,元类主要作用就是在要创建的类中使用参数metaclass=YourMetaclass调用自定义的元类,这样就可以为所有调用了这个元类的类添加相同的属性了. ...

  6. 解决T100设计器无法更新基础数据的幺蛾子

    create by leezec 296066606 声明:本文仅个人经验,并非权威,也不保证能解决每一个人的情况 设计器在首次安装之后需要进行版本检查,基础数据更新,然而因为种种原因,在基础数据更新 ...

  7. Java常用类(谷粒商城学习记录)

    Java常用类 谷粒商城学习记录 谷粒商城学习记录 谷粒商城学习记录 干嘛老是提示我与别人的文章相似呢?真的是我自己整理的啊啊啊 老是提示与这个文章相似 https://blog.csdn.net/c ...

  8. java爬取网页数据_利用Python做数据分析—对前程无忧数据类岗位进行分析

    引言 随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称"最火行业":大数据.数据分析.数据挖掘.机器学习.人工智能,这五门行业各有不同又互有穿插.近几 ...

  9. 与Brian Goetz聊Java的数据类

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 作为Oracle的Java语言架构师,Brian Goetz一直致力于Java编程语言在生产 ...

最新文章

  1. 多角度解析自动驾驶芯片
  2. R语言 、Excel哪个更能胜任数据分析?
  3. Puppeteer爬虫初探
  4. Windows环境下搭建rocketMQ环境
  5. Unicode和UTF-8的关系
  6. 实现类似表格内容动态滚动效果
  7. Windows 动态链接库DLL浅解
  8. Boost:基于Boost的异步TCP回显服务器
  9. 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)
  10. java 短路判断_java中和的区别(|和|同理)
  11. 台达plc控制伺服电机编程实例_PLC控制伺服电机:控制脉冲的相关计算
  12. 关于解决Codeblocks中文乱码问题
  13. 比特币怎么比特币钱包_5分钟内获得比特币
  14. SAR空间自回归模型
  15. 获取QQ音乐排行榜数据
  16. 盘点Linux下的开源云平台云存储服务
  17. UEditorPlus v2.6.0发布 编辑器草稿功能,操作体验优化
  18. 《大道至简》第一章 编程的精义 伪代码
  19. 写博客的主要动力来源
  20. 10个炫酷实用的HTML5图表动画应用

热门文章

  1. 是男人就过 8 题--Pony.AI 题 - A String Game
  2. Spring Boot之基于Dubbo和Seata的分布式事务解决方案
  3. 分享10道常考Java面试题及答案
  4. 互联网账户系统如何设计
  5. Oracle入门(十四.23)之管理触发器
  6. mysql分组查询的两类
  7. 遍历HashMap的四种方法
  8. mfc定义了变量仍提示未定义标识符_JavaScript-变量
  9. 处理api返回的数据_API 乐队指挥家,网关服务正式上线
  10. super构造方法为什么给子类赋值_【Java学习 | Javase】super