Record类浅喽一眼~

news2024/11/21 2:28:32

Record类的一点小概念嗷。

一. 基本使用

java19 的新特性:

我们先构造一个student的Record类.

默认构造几个属性.

public record Student(Integer id,String name, String email,Integer age) {
}

然后简单搞一点例子

public static void main(String[] args) {
        Student student = new Student(1, "张三", "nihao@qq.com", 20);
        System.out.println(student.name().equals("张三1"));
        System.out.println(student);
    }

得出结论:

通过构造方法创建了

目录

一. 基本使用

二.Instance Methods

三.静态方法

四.Record的静态方法

五、Record和lombok


只读的对象, 能够读取到每个的属性, 但是不能设置新的值.

Record用于创建不可变的对象, 同时减少了模版代码.

Record对每个属性提供了public访问器, 例如student.name();

二.Instance Methods

public record Student(Integer id,String name, String email,Integer age) {

    public String concat(){
        return String.format("姓名: %s,年龄是: %d",this.name,this.age);
    }

    public static void main(String[] args) {
        Student student = new Student(1, "张三", "nihao@qq.com", 20);
        String concat = student.concat();
        System.out.println(concat);
    }
}

三.静态方法

public static String emailUpperCase(String email){
        return Optional.ofNullable(email).orElse("no email").toUpperCase();
    }

四.Record的静态方法

 

五、Record和lombok

lombok我们用的太多了,同程在项目中也是经常使用,一种可以减少样模版代码的工具。

而Record是创建不可变对象且减少样模版代码的好方法~

两种具有重叠的部分。

其实也没有啥可以比较的, 但是你要是想比一下,那我也没有办法~~

原生支持 vs 第三方库: Record 是 Java 14 引入的原生特性,它是 Java 语言的一部分,不需要额外的库或插件。而 Lombok 是一个第三方库,需要在项目中添加 Lombok 的依赖,并在 IDE 中安装 Lombok 插件才能正常使用。

不可变性: Record 是不可变的数据对象,一旦创建后,其属性值是无法更改的。而使用 Lombok 的 @Data 注解生成的类默认是可变的,可以通过 setter 方法修改属性值。

自动生成的方法: Record 自动生成的方法包括构造函数、getter、equals、hashCode 和 toString。而使用 Lombok 的 @Data 注解生成的类默认会生成 getter、setter、equals、hashCode 和 toString 方法,但可以通过其他注解来控制生成的方法。

语法差异: Record 的语法相对简洁,使用关键字 record 定义数据对象。而使用 Lombok 的 @Data 注解需要在类上标注注解,并通过 IDE 或构建工具支持来生成相应的方法。

还是要根据需要再去选择~

六、实现接口

public record ProductRecord(String id,String name,Integer qty) implements PrintInterface{
    @Override
    public void print() {
        String productDesc = String.join("-", id, name, qty.toString());
        System.out.println(productDesc);
    }

    public static void main(String[] args) {
        ProductRecord productRecord = new ProductRecord("1", "华为手机", 200);
        productRecord.print();
    }
}

七、Local Record

当然,还可以作为本地对象使用。

比如这个样子啦

package com.example.demo;

public class LocalRecord {
    public static void main(String[] args) {

        // 定义
        record SaleRecord(String saleId,String productName,Double money){ }
        // 创建
        SaleRecord record = new SaleRecord("1", "手机", 3500.00);
        System.out.println(record);

    }
}

八、嵌套Record

九、instanceof 判断Record

十、总结

定义:Record 是一个类声明,用于定义不可变的数据对象。

不可变性:Record 的实例是不可变的,即一旦创建,就不能修改其状态。

属性自动声明:在 Record 中,可以使用简洁的语法声明属性,它们会自动生成私有的 final 字段、构造函数、访问方法和 equals()/hashCode()/toString() 方法。

默认实现:Record 默认提供了一些方法的实现,如 equals()、hashCode() 和 toString(),它们会根据属性的值生成对应的逻辑。

构造函数:Record 自动生成一个公共的构造函数,用于初始化属性值。

继承和接口:Record 可以继承其他类和实现接口,但必须在 Record 类声明的开头位置。

可变字段:除了属性字段外,Record 还可以包含其他可变字段,但它们不会影响 Record 的不可变性。

模式匹配:Record 可以与模式匹配结合使用,方便地进行数据提取和条件判断。

总的来说,Record 提供了一种简洁、安全且易用的方式来定义不可变的数据类。它可以减少样板代码,提高代码的可读性和可维护性,并且通过自动化的代码生成和默认实现~


ok那就先这样~

 

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

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

相关文章

2023年上半年系统分析师上午真题及答案解析

1.信息系统的构成包括( )。 A.计算机硬件、计算机软件、网络和通信设备、系统分析人员、系统设计人员、系统开发人员 B.计算机硬件、计算机软件、系统分析人员、系统设计人员、系统开发人员 C.计算机硬件、计算机软件、系统设计人员、系统开发人员、信息用户 D.计算机硬件…

【C++】类和对象——友元函数和友元类的概念、初始化列表、explicit关键字、static成员

文章目录 1.友元函数和友元类的概念1.1友元函数1.2友元类 2.构造函数知识补充2.1初始化列表2.2explicit关键字 3.static成员3.1static成员概念3.2static成员特性 1.友元函数和友元类的概念 在C中,友元函数和友元类是指允许非成员函数或非成员类访问某个类中的私有成…

LeetCode面向运气之Javascript—第13题-罗马数字转整数-99.21%

LeetCode第13题-罗马数字转整数 题目要求 给定一个罗马数字,将其转换成整数。 罗马数字 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M 分别代表1,5,10,50&#xf…

一些常用的分布式组件实现技巧

广播 可用redis的pubsub机制来支持集群内的广播。 基于redis的分布式锁 加锁 使用setnx命令: SET lock_key random_value NX PX 5000 其中: random_value 是客户端生成的唯一的字符串,用于在删除时唯一标识client身份。 NX 代表只在键不…

【开发实用】还在用BeanUtils?不如用MapStruct

文章目录 1. 什么是MapStruct2. 为什么使用MapStruct3. 如何使用MapStruct 1. 什么是MapStruct MapStruct是一个Java注解处理器,它可以简化Java bean之间的转换。它使用基于生成器的方法创建类型安全的映射代码,这些代码在编译时生成,并且比…

2023夏季黑客松大赛,Moonbeam邀请你来BUIDL

由Parity和OneBlock联合举办的「2023 夏季波卡黑客松大赛」正在火热开启中。自报名开启之日,便获得了来自海内外对波卡生态的高度专注和对Web3开发的热情。 本次黑客松聚焦智能合约、开发工具、社交网络等大赛命题,邀请了行业领军人、技术大咖、投资人等…

推进开源法律知识普及|2023开放原子全球开源峰会开源法律与合规分论坛即将启幕

随着开源在推动创新、促进协作方面的作用日益凸显,开源领域的法律与合规问题日益受到关注。 6月11日,开放原子全球开源峰会开源法律与合规分论坛将在北京经济开发区国家信创园召开,论坛以“开源知识产权的深度现实与广阔未来”为主题&#x…

基于SSM的校园旧书交易交换平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Mybatis_plus——标准分页功能制作

mybatispuls中提供分页查询中需要两个参数,一个是IPage接口的实现类,还有一个后面说。 IPage有且只有一个实现类Page类型在里面已经提供有了,传两个参数即可使用,一个是页码值,一个是每页显示数据的条数。查询完之后可…

chatgpt赋能python:Python代做:让您的网站更友好的SEO利器

Python代做:让您的网站更友好的SEO利器 如果您是一位网站管理员或者SEO工程师,您一定知道SEO对于网站的重要性。那么在SEO中,Python代做可以为您提供什么?在本文中,我们将通过介绍Python代做的技术和方法,…

unity发布webGL后无法预览解决

众所周知,unity发布成webgl后是无法直接预览的。因为一般来说浏览器默认都是禁止webgl运行的。 直接说我最后的解决方法:去vscode里下载一个live server ,安装好。 下载vscode地址Visual Studio Code - Code Editing. Redefined 期间试过几种方法都不管…

Ansys Zemax | 探究 OpticStudio 偏振分析功能

本文介绍了 OpticStudio 模拟基于偏振的光学现象的几种方法。本文的目的是在对基于偏振的光学进行建模时检查这些特征的优势和正确应用。讨论的功能包括偏振光瞳图、琼斯矩阵、双折射、表面涂层等。这些对于波片和隔离器等实际应用很重要。(联系我们获取文章附件&am…

plt.loglog()函数的用法和示例(含代码)

目录 常用坐标下的图像显示在loglog函数下的显示同时显示参考文献 plt.loglog()函数通常是用于和对数函数相关的显示中。 在研究plt.loglog()函数之前,我们可以先从常见的线性平面坐标系入手。 如 np.linespace()函数,它在指定的间隔内返回均等的数字。 np.linespa…

Redis主从架构、数据同步原理、全量同步、增量同步

目录 专栏导读一、Redis主从架构二、数据同步原理三、全量同步的流程三、可以从以下几个方面来优化Redis主从就集群四、全量同步和增量同步区别?五、什么时候执行全量同步?六、什么时候执行增量同步?七、超卖问题 大家好,我是哪吒…

高完整性系统工程(八):Hoare Logic

目录 1. 霍尔逻辑(Proving Programs Correct) 1.1 警告(Caveats) 1.2 误解(Misconception) 1.3 编程语言(Programming Language) 1.4 程序(Programs) 1…

java学习 spring mybatis maven juc并发 缓存 分布式

Spring系列第11篇:bean中的autowire-candidate又是干什么的?_路人甲Java的博客-CSDN博客 Spring系列 Spring系列第1篇:为何要学spring? Spring系列第2篇:控制反转(IoC)与依赖注入(DI…

I.MX RT1170加密启动详解(1):加密Boot镜像组成

使用RT1170芯片构建的所有平台一般都是高端场合,我们需要考虑软件的安全需求。该芯片集成了一系列安全功能。这些特性中的大多数提供针对特定类型攻击的保护,并且可以根据所需的保护程度配置为不同的级别。这些特性可以协同工作,也可以独立工…

macOS Ventura 13.5beta2 OpenCore 双引导分区原版黑苹果镜像

镜像特点(本文原地址:http://www.imacosx.cn/113805.html,转载请注明出处) 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clove…

【cfeng work】什么是云原生 Cloud Native

WorkProj 内容管理 云原生云原生应用十二要素应用cfeng的work理解 本文introduce 云原生 Cloud Native相关内容 随着技术的迭代,从最初的物理机—> 虚拟机,从单机 —> 分布式微服务, 现在的热门概念就是云☁(cloud&#xff…

Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2023 年 5 月更新)

Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2023 年 5 月更新) 在虚拟机、Mac 电脑和 TPM 不符合要求的旧电脑上安装 Windows 11 的通用方法总结 请访问原文链接:https://sysin.org/blog/windows-11-no-tpm/,查看最新版。原创作品…