java 记录考勤记录_Java 14:记录

java 记录考勤记录

Java 14是在几周前问世的,它引入了Record类型,它是一个不变的数据载体类,旨在容纳一组固定的字段。 请注意,这是一种预览语言功能 ,这意味着必须使用--enable-preview标志在Java编译器和运行时中显式启用它。

我将直接介绍一个Book记录示例,该记录旨在保存书名,作者,出版日期和价格。 这是记录类的声明方式:

 public record Book(String title, String author, LocalDate publishDate, double price) {  } 

您可以使用javap查看编译器自动生成的代码:

 public final class Book extends java.lang.Record { public Book(java.lang.String, java.lang.String, java.time.LocalDate, double ); public java.lang.String title(); public java.lang.String author(); public java.time.LocalDate publishDate(); public double price(); public java.lang.String toString(); public final int hashCode(); public final boolean equals(java.lang.Object);  } 

如上所示,编译器自动生成了构造函数,getter方法, hashCodeequalstoString ,从而使我们不必键入很多样板代码。

但是,记录不仅可以节省键入时间。 它们还使您的意图明确了,您希望将不可变数据项建模为一组相关字段。

用于现场验证的紧凑型构造器

现在,假设您要向记录添加验证和默认值。 例如,您可能要验证未以负价或未来发布日期创建Book记录。 可以使用紧凑的构造函数来完成此操作,如下所示:

 public record Book(String title, String author, LocalDate publishDate, double price) { //compact constructor (no parameter list), used for validation and setting defaults public Book { if (price < 0.0 ) { throw new IllegalArgumentException( "price must be positive" ); } if (publishDate != null && publishDate.isAfter(LocalDate.now())) { throw new IllegalArgumentException( "publishDate cannot be in the future" ); } this .author = author == null ? "Unknown" : author; }  } 

紧凑的构造函数没有参数列表。 它验证价格和发布日期,并为作者设置默认值。 在此构造函数中未分配的字段(即titlepublishDateprice )在此构造函数的末尾隐式初始化。

替代构造函数和其他方法

记录使您可以定义其他方法,构造函数和静态字段,如下面的代码所示。 但是,请记住,从语义上说,一条记录被设计为数据载体,因此,如果您觉得要添加额外的方法,则可能是需要一个类而不是一条记录。

 public record Book(String title, String author, LocalDate publishDate, double price) { // static field private static final String UNKNOWN_AUTHOR = "UNKNOWN" ; // compact constructor, used for validation and setting defaults public Book { if (price < 0 ) { throw new IllegalArgumentException( "price must be positive" ); } if (publishDate != null && publishDate.isAfter(LocalDate.now())) { throw new IllegalArgumentException( "publishDate cannot be in the future" ); } this .author = author == null ? UNKNOWN_AUTHOR : author; ? UNKNOWN_AUTHOR : author; } // static factory constructor public static Book freeBook(String title, String author, LocalDate publishDate) { return new Book(title, author, publishDate, 0.0 ); } // alternative constructor, without an author public Book(String title, LocalDate publishDate, double price) { this (title, null , publishDate, price); } // additional method to get the year of publish public int publishYear() { return publishDate.getYear(); } // override toString to make it more user friendly @Override public String toString() { return String.format( "%s (%tY) by %s for £%.2f" , title, publishDate, author, price); }  } 

翻译自: https://www.javacodegeeks.com/2020/04/java-14-records.html

java 记录考勤记录

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

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

相关文章

漫画:什么是HashMap

转载自 玻璃猫 程序员小灰众所周知&#xff0c;HashMap是一个用于存储Key-Value键值对的集合&#xff0c;每一个键值对也叫做Entry。这些个键值对&#xff08;Entry&#xff09;分散存储在一个数组当中&#xff0c;这个数组就是HashMap的主干。 HashMap数组每一个元素的初始值都…

jvm(10)-早期(编译期)优化

【0】README 0.1&#xff09;本文部分文字描述转自 “深入理解jvm”&#xff0c;旨在学习 早期&#xff08;编译期&#xff09;优化 的基础知识&#xff1b; 0.2&#xff09;本文部分文字描述转自&#xff1a; http://www.cnblogs.com/zhouyuqin/p/5223180.html 【1】概述 …

etl介绍与etl工具比较_ETL万岁

etl介绍与etl工具比较提取转换负载是从一个数据系统中提取数据并加载到另一个数据系统中的过程。 涉及的数据系统称为源系统和目标系统。 来自源系统的数据形状与目标系统不匹配&#xff0c;因此需要进行一些转换以使其兼容&#xff0c;该过程称为Transformation 。 转换是由m…

漫画:高并发下的HashMap

转载自 玻璃猫 程序员小灰上一期我们介绍了HashMap的基本原理&#xff0c; 这一期我们来讲解高并发环境下&#xff0c;HashMap可能出现的致命问题。HashMap的容量是有限的。当经过多次元素插入&#xff0c;使得HashMap达到一定饱和度时&#xff0c;Key映射位置发生冲突的几率会…

jvm(11)-晚期(运行期)优化

【0】README 0.1&#xff09;本文部分文字描述转自 “深入理解 jvm”&#xff0c;旨在学习 晚期&#xff08;运行期&#xff09;优化 的基础知识&#xff1b; 【1】概述 1&#xff09;即时编译器&#xff08;JITjust in time compiler&#xff09;定义&#xff1a;为了提高…

java 新功能_Java 14的新功能

java 新功能2020年3月17日&#xff0c;Oracle发布了名为Java 14的Java新版本&#xff0c;其中包括许多新功能&#xff0c;工具&#xff0c;安全性&#xff0c;调试和更新的文档方面的改进。 但是&#xff0c;Oracle还向您提供Java的较旧版本&#xff0c;因为它具有向后兼容性&a…

漫画:什么是ConcurrentHashMap

转载自 玻璃猫 程序员小灰————————————————————————前两期我们讲解了HashMap的基本原理&#xff0c;以及高并发场景下存在的问题。没看过的小伙伴可以点击下面链接&#xff1a;漫画&#xff1a;什么是HashMap&#xff1f; 漫画&#xff1a;高并发下的H…

jvm(12)-java内存模型与线程

【0】README0.1&#xff09;本文部分文字描述转自“深入理解jvm”&#xff0c;旨在学习“java内存模型与线程” 的基础知识&#xff1b;【1】概述1&#xff09;并发处理的广泛应用是使得 Amdahl 定律代替摩尔定律称为计算机性能发展源动力的根本原因&#xff1b;2&#xff09;A…

junit mockito_从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范

junit mockito可执行规范是也可以用作设计规范的测试。 通过启用通用语言&#xff08;在DDD世界中&#xff0c;这也称为无处不在的语言 &#xff09;&#xff0c;它们使技术和业务团队能够进入同一页面。 它们充当代码的未来维护者的文档。 在本文中&#xff0c;我们将看到一种…

漫画:什么是红黑树

转载自 玻璃猫 程序员小灰————————————二叉查找树&#xff08;BST&#xff09;具备什么特性呢&#xff1f;1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。下图中这棵树…

jvm(13)-线程安全与锁优化

【0】README 0.1&#xff09;本文部分文字转自“深入理解jvm”&#xff0c; 旨在学习 线程安全与锁优化 的基础知识&#xff1b; 0.2&#xff09;本文知识对于理解 java并发编程非常有用&#xff0c;个人觉得&#xff0c;所以我总结的很详细&#xff1b; 【1】概述 【2】线程安…

apache ignite_Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序

apache ignite在上一个博客中&#xff0c;我们为Ignite应用程序创建了Kubernetes部署文件。 在此博客上&#xff0c;我们将在Kubernetes上部署Ignite应用程序。 我将在此使用minikube。 让我们先构建 mvn clean install 我将创建一个简单的Docker映像&#xff0c;因此需要Doc…

什么是AES算法?(整合版)

转载自 玻璃猫 程序员小灰 假设有一个发送方在向接收方发送消息。如果没有任何加密算法&#xff0c;接收方发送的是一个明文消息&#xff1a;“我是小灰” 如果消息被中间人截获到&#xff0c;即使中间人无法篡改消息&#xff0c;也可以窥探到消息的内容&#xff0c;从而暴露了…

soapui 测试soap_使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第二部分

soapui 测试soap在本系列的第一篇文章中&#xff0c;我们创建了一个基本的身份验证服务&#xff0c;以使用SoapUI进行调用。 因此&#xff0c;在第二篇文章中&#xff0c;我们将逐步演示如何使用此工具成功调用这种服务。 使用SoapUI的1-Basic WCF SOAP –创建新的SOAP项目 首…

如何获得即时编译器(JIT)的汇编代码(linux环境下)

【0】README0.1&#xff09;本文主要解决如何在linux下获取即时编译器的汇编代码问题&#xff1b;0.2&#xff09;本文部分内容转自&#xff1a;http://psy-lob-saw.blogspot.jp/2013/01/java-print-assembly.html1&#xff09;给定java源代码// 单例模式&#xff08;分析volat…

漫画:什么是SHA系列算法

转载自 玻璃猫 程序员小灰 SHA-1 SHA-1算法可以从明文生成160bit的信息摘要&#xff0c;示例如下&#xff1a; 给定明文&#xff1a;abcd SHA-1摘要&#xff1a;81FE8BFE87576C3ECB22426F8E57847382917ACF SHA-1 与 MD5的主要区别是什么呢&#xff1f; 1.摘要长度不同。 …

apache ignite_Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

apache ignite在之前的一系列博客中&#xff0c;我们在Kubernetes集群上启动了一个Ignite集群。 在本教程中&#xff0c;我们将使用先前在Spring Boot Application上创建的Ignite集群。 让我们使用Spring Boot创建我们的项目。 Spring Boot应用程序将连接到Ignite集群。 让我…

tomcat(1)一个简单的web server

【0】README 0.1&#xff09;本文部分描述转自“深入剖析tomcat”&#xff0c; 旨在学习 一个简单的web server 的基础知识&#xff1b; 0.2&#xff09;for complete source code, please visit https://github.com/pacosonTang/HowTomcatWorks/tree/master/chapter1 【1】…

漫画:什么是MD5算法

转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢&#xff1f;分三步&#xff1a; 1.收集相关业务参数&#xff0c;在这里是金额和目标账户。当然&#xff0c;实际应用中的参数肯定比这多得多&#xff0c;这里只是做了简化。 2.按照规则&#xff0c;把参数名和参数…

idea快速生成crud_Java / Spring:如何快速生成完整的Swagger文档CRUD REST API

idea快速生成crud作为开发人员&#xff0c;我们在日常生活中经常面临的最繁琐的任务之一就是编写良好且易于理解的文档。 无论我们的文档只有几行来解释功能的核心功能&#xff0c;还是表明系统的来龙去脉的成熟文章都没关系。 重要的是&#xff0c;我们试图通过文档传达的信息…