03- javaBean 新花样? record 新特性

定义和特性

JDK16 最终增加了record关键字,record定义的类希望成为数据传输对象 也叫数据载体,使用record 时候,编译器会自动生成:

  1. 不可变的字段
  2. 一个规范的构造器
  3. 每个元素(组件)都有访问方法
  4. equals
  5. hashCode
  6. toString
public record Student(String name, int age) {  // 简约 构造方法,不在这里写入参数 自动配置参数类型public Student {  //可以在这个地方进行校验参数if (Objects.isNull(name)) {  throw new RuntimeException("name is null");  }  }  }public class RecordTest {  public static void main(String[] args) {  Student student = new Student("小白", 20);  System.out.println(student.name());  System.out.println(student.age());  System.out.println(student.toString());  }  
}---
小白
20
Student[name=小白, age=20]

编译器做了哪些事情呢? 可以通过 idea,里面的功能进行covert record to class ,进行转化, 等价处理。

//final 修饰不会被继承
public final class Student {  private final String name;  private final int age;  public Student(String name, int age) {  this.name = name;  this.age = age;  }  @Override  public String toString() {  return "Student[" +  "name=" + name + ", " +  "age=" + age + ']';  }  //只有访问方法,在没有set方法public String name() {  return name;  }  public int age() {  return age;  }  @Override  public boolean equals(Object obj) {  if (obj == this) return true;  if (obj == null || obj.getClass() != this.getClass()) return false;  var that = (Student) obj;  return Objects.equals(this.name, that.name) &&  this.age == that.age;  }  @Override  public int hashCode() {  return Objects.hash(name, age);  }  }

注意事项

  1. record 里面字段就是组件的不可变是引用不可变,如果是对象的话,里面的参数是可变的
  2. record现在做为数据传输类更多的是支持函数式编程,也是这样来避免并发会出现的问题。

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

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

相关文章

SQL 注入攻击 - insert注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、注入原理 描述:insert注入是指通过前端注册的信息被后台通过insert操作插入到数据库中。如果后台没有做相应的处理,就可能导致insert注入漏洞。原因:后台未对用户输入进行充…

python爬虫(4)

#前期先说明一下为啥爬虫需要学习数组的存储和处理,只是说在你后期接触到最简单的爬虫后有一个地方可以存放你的数据# 下面为大家带来一个我在做excel表整理时的代码以及上次代码的结果 上次代码的结果: 新的代码: import numpy as np im…

使用51单片机控制lcd1602字体显示

部分效果图: 准备工作: 51单片机(BST)1602显示屏 基础知识: 注:X表示可以是0,也可以是1; DL 1, N 1, F 0, 代码一: 要求显示字母…

MySQL下载及安装

引言 在当今数据驱动的世界里,数据库管理系统(DBMS)扮演着至关重要的角色。MySQL,作为一个广泛使用的关系型数据库管理系统,因其强大的性能、可靠性以及易用性,在各种应用场景中都有着重要的地位。无论是小型项目、网站还是大型的企业级应用,MySQL都能够提供高效的数据存…

网络安全审计是什么意思?与等保测评有什么区别?

网络安全审计和等保测评在信息安全领域中都是非常重要的环节。但不少人对于这两者是傻傻分不清楚,今天我们就来简单聊聊网络安全审计是什么意思?与等保测评有什么区别? 网络安全审计是什么意思? 网络安全审计是通过对网络系统和网…

学习和认知的四个阶段,以及学习方法分享

本文分享学习的四个不同的阶段,以及分享个人的一些学习方法。 一、学习认知的四个阶段 我们在学习的过程中,总会经历这几个阶段: 第一阶段:不知道自己不知道; 第二阶段:知道自己不知道; 第三…

数据结构部分

来源地址 一 数据结构 1 堆和树之间的区别 区别就在于树是没有特定顺序的,你需要遍历整个树才能找到特定元素;而堆是有序的,你可以直接找到最大(或最小)的元素。 堆:假设你正在开发一个任务调度系统&…

JimuReport积木报表 v1.7.2 版本发布,低代码报表工具

项目介绍 一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报…

YoLo进化史《A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 TOYOLOV8 AND BEYOND》

Abstract YOLO已成为机器人、无人驾驶汽车和视频监控应用的核心实时目标检测系统。我们对YOLO的发展进行了全面的分析,研究了从最初的YOLO到YOLOv8的每次迭代中的创新和贡献。我们首先描述标准指标和后处理;然后,我们讨论了网络架构的主要变化和每个模型…

C++面试题和笔试题(一)

今天面试了一家100人以上的小公司,做QT上位机开发,个人感觉凉凉。以下是笔试题和我能回忆起的面试题 目录 一、笔试题 1. 什么是C中的指针 官方解释: 自己的理解: 2.什么是引用,它与指针有什么不同 官方解释&…

SpringCloud-Alibaba-Nacos教程

SpringCloud-Alibaba-Nacos教程 下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.3 直接进入bin包 运行cmd命令 startup.cmd -m standalone 运行成功后 进入nacos可视化页面 账号密码默认都是nacos http://localhost:8848/nacos 微服务入驻Nacos服务注册…

阿尔巴尼亚借助ChatGPT加快欧盟入会进程

原文:https://www.euractiv.com/section/politics/news/albania-to-speed-up-eu-accession-using-chatgpt/ 来源:https://weibo.com/1727858283/O3ZoWp6oO?refer_flag1001030103_ 阿尔巴尼亚政府计划利用ChatGPT技术,将成千上万页的欧盟法律…

【Python】成功解决IndexError: list index out of range

【Python】成功解决IndexError: list index out of range 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订…

首次实现Go调用C的dll文件

首先,要使用Go调用C的DLL文件,你需要遵循以下步骤: 编写C代码: 首先,编写你的C代码,并将其编译成DLL文件。假设你有一个名为example.c的C源文件,其中包含你要调用的函数。 // example.c #includ…

探索stable diffusion的奇妙世界--01

目录 1. 理解prompt提示词: 2. Prompt中的技术参数: 3. Prompt中的Negative提示词: 4. Prompt中的特殊元素: 5. Prompt在stable diffusion中的应用: 6. 作品展示: 在AI艺术领域,stable di…

Mysql 表逻辑分区原理和应用

MySQL的表逻辑分区是一种数据库设计技术,它允许将一个表的数据分布在多个物理分区中,但在逻辑上仍然表现为一个单一的表。这种方式可以提高查询性能、简化数据管理,并有助于高效地进行大数据量的存储和访问。逻辑分区基于特定的规则&#xff…

机器学习——PPO补充

On-policy vs Off-policy 今天跟环境互动,并学习是on-policy 只是在旁边看,就是Off-policy 从p中选q个重要的,需要加一个weight p(x)/q(x) p和q不能相差太多 采样数太少导致分布差很多,导致weight发生变化 On-Policy -&g…

我的NeRF学习——初步认识

NeRF NeRF,全名为 Neural Radiance Fields,是一种基于深度学习的三维场景隐式表示和渲染方法 1 NeRF的基本概念 1.1 辐射场表示场景 NeRF的核心思想是通过神经网络训练出来的辐射场对场景进行隐式表示。这种表示方式与传统的使用体素、网格或点云的显…

MySQL 的基础操作

数据库的基础操作 1. 库操作2. 表的操作3. 数据类型 数据库是现代应用程序中至关重要的组成部分,通过数据库管理系统(DBMS)存储和管理数据。 1. 库操作 创建数据库 创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例&a…

全栈的自我修养 ———— vue中子组件使用父组件的方法

子组件取得父组件的方法 一、通过props(比较推荐)二、通过$emit (小编很推荐)3、provide/inject (不建议)4、 $parent (不建议) 一、通过props(比较推荐) 在父组件页面给子组件绑定方法,左边是子组件接收的方法名,内容…