Record(记录)与密封类(sealed)

1.Recode记录

(1). 前言

  • Recode是一种特殊的类,在java1.4时被引入.
  • 其出现的原因是我们在编写JavaBean代码时我们会写出很多繁冗的代码(诸如getter/setter方法,重载的构造器,重写的hashCode()等等),为了解决这个问题,引入了Recode记录.

(2). 例 : 

在引入记录前 : 

public class Employee {int age;String name;public Employee() {System.out.println("调用了空参构造器");}public Employee(int age, String name) {System.out.println("调用了有两个参数的构造器");this.age = age;this.name = name;}public Employee(int age) {System.out.println("调用了一个参数构造器");this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employee employee = (Employee) o;return age == employee.age && Objects.equals(name, employee.name);}@Overridepublic int hashCode() {return Objects.hash(age, name);}@Overridepublic String toString() {return "Employee{" +"age=" + age +", name='" + name + '\'' +'}';}
}

在引入Recode后 : 

public record Emp(int age, String name) {
}

Recode提供了构造器public Emp(int age, String name), getter()方法(注意没有setter()方法)等.

Test : 

class RecodeTest{public static void main(String[] args) {Emp e = new Emp(20, "hexua");//默认调用e对象的重写的toString方法System.out.println(e);//获取age :System.out.println("年龄是" + e.age());//获取name :System.out.println("名字是" + e.age());}
}控制台 : 
Emp[age=20, name=hexua]
年龄是20
名字是20

注 :

  • 不能显式继承其他类.
  • JavaBean是可变的,而recode是不可变的.所以不可以用recode来替代JavaBean的功能.

2.密封类(sealed关键字)

密封类是java17中引入的一个新特性,用于限制类的继承.密封类可以防止其他类继承它们.从而确保更好的类型安全性和性能.

例 : 

//sealed修饰表明该类是密封类, permits指定了由哪些类来继承
sealed class Class1 permits Class2, Class3{}
//Class2继承了Class1, 必须对Class1的子类进行限制, 选择其子类是由sealed修饰, 还是final, non-sealed
final class Class2 extends Class1{}
non-sealed class Class3 extends Class1 {}

注 : 

  • 密封类可以permits指定可以由哪些类来继承该密封类.permits指定后,其子类必须显式extends继承该密封类.且其子类需要选择声明为sealed/non-sealed/final.
  • 如果其子类声明为sealed,则其子类也为密封类,可以指定由哪些类继承.
  • 如果其子类声明为final,说明该子类不能被继承.
  • 如果其子类声明为non-sealed,则该子类并无限制,与普通的类无异.

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

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

相关文章

Linux 基础命令使用创建用户

浏览网站的时候图片,看到一个小练习。创建用户分别位于不同的用户组。 解答下面的题目 2、建立用户使用 useradd,设置密码使用passwd的命令。大概不会使用命令可以借助man来解答。 先建立用户组: groupadd group1 # group1 不存在先建立&…

会声会影滤镜怎么用 会声会影滤镜效果怎么调 会声会影视频制作教程

在进行视频剪辑时,合理地运用滤镜效果可以提升视频的观赏性,使你的作品更加出彩。这篇文章便一起来学习会声会影滤镜怎么用,会声会影滤镜效果怎么调。 一、会声会影滤镜怎么用 使用会声会影的滤镜效果非常简单,以下是具体的操作…

全氟己酮灭火绳的用法早知道:灭火绳多少钱一米?

全氟己酮灭火装置作为一种高效、安全、环保的灭火技术,已经成为了备受青睐的新型灭火选择之一。伴随着市场需求不断增长,在全氟己酮厂家的努力下,各式各样的全氟己酮自动灭火装置不断涌现,包括自动灭火贴、灭火片、灭火毯、灭火绳…

如何打造自己的O2O平台系统:商业模式探索与实践

大家好,我是微三云周丽,今天给大家分析当下市场比较火爆的商业模式! 小编今天跟大伙们分享什么是O2O平台系统? 在数字化浪潮的推动下,O2O(Online to Offline)商业模式已成为连接线上与线下、商家…

c primer plus(2)

前言 延续上一讲的内容,今天来写一写这本书的第三章:处理数据 好吧,本次博客仍然是总结重点内容 简单变量 在本书中变量有三个属性 1信息存储在什么地方 2要存储什么 3存储类型 比如 int braincount; braincount5; 这两行代码体现了…

Java数据类型和变量

一.字面常量 常量即在程序运行期间不变的的量。 字面常量的分类: 1.字符串常量:“内容”,双引号里的内容; 2.整形常量:100,像这样的; 3.浮点数常量:1.23,直接写的浮…

人工智能论文GPT-3(1):2020.5 Language Models are Few-Shot Learners;摘要;引言;scaling-law

摘要 近期的工作表明,在大量文本语料库上进行预训练,然后针对特定任务进行微调,可以在许多NLP任务和基准测试中取得实质性进展。虽然这种方法在架构上通常是与任务无关的,但仍然需要包含数千或数万示例的针对特定任务的微调数据集…

数学专题1 - 素数筛(2)

C素数练习目录 1. 素数基础 1.1 了解什么是素数及其基本性质 素数(质数)是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。换句话说,如果一个数 n n n 只有两个因数:1和 n n n 本身,那么 n n n 就是一个素数。 素数有以下基本性质: 2是最小的素数,也…

通过python实现分析出生日期辨识你的星座 出生日期判断星座

目录 一.总体说明 二.完整代码 三.逐行分析 一.总体说明 这段代码的主要功能是根据用户输入的出生日期,判断并输出对应的星座。 首先,定义了一个名为sdate的列表,其中包含了每个星座所对应的日期。接下来,定义了conts列表,存储了星座的名称,以及signs列表,存储了星座…

我们该如何看待AIGC(人工智能)

目录 AIGC的概述: AIGC的发展经历: AIGC的概述: [TOC]( 🚀文章目录) ---AIGC全称为AI-Generated Content,指基于生成对抗网络GAN、大型预训练模型等人工智能技术,通过已有数据寻找规律,并通过…

数字藏品平台家政平台搭建重点,会用到哪些三方服务?

数字藏品平台搭建重点: 藏品安全性与版权保护:确保数字藏品的安全存储,防止数据丢失或被篡改,同时确保藏品的版权得到合法保护。交易系统的构建:建立一个稳定、透明的交易系统,支持藏品的买卖、竞价等交易…

黑盒优化系列(一):自动化提示词优化【一、绪论】

大语言模型的提示词 随着ChatGPT等大语言模型的问世,我们获取知识的方式从单一的搜索引擎如Google转变为类似ChatGPT这种通过 Q & A 方式提供的方法。 我们尝试对比一下不同提示词,对应的模型输出 ChatGPT无提示词 API: ChatGPT 3.5 …

function calling实现

NLP - LLM - function calling实现 一、function calling介绍二、chatglm3 function calling实现 一、function calling介绍 大型模型如 GPT-4 被设计为能够与外部系统交互,比如通过 API 调用执行某些任务。例如,一个大型模型可能被编程为在需要时调用外…

零代码编程:下载的PDF文件自动批量重命名

从arxiv或者一些其他网站下载的PDF文件,标题只是创建时间,看不出里面内容是什么,要一个个打开看非常麻烦。 可以在GPT4中输入提示词: 你是一个Python编程专家,要完成一个编写关于重命名PDF文件的Python脚本的任务&…

C语言(1):初识C语言

0 安装vs2022 见 鹏哥视频即可 1 什么是C语言 c语言擅长的是底层开发! 现在一般用的是C89和C90的标准 主要的编辑器: 2 第一个C语言项目 .c 源文件 .h头文件 .cpp c文件 c语言代码中一定要有main函数 标准主函数的写法: int main() { …

springboot 集成 i18n实现国际化信息返回 实现中英文切换 实现网站支持多语言切换

还是直接上代码 目前实现了 中英文 返回 别的语言 都差不多 主要用spring boot 自带的 类实现的 不用引入任何 依赖 使用的就是下面的类 org.springframework.context.MessageSource 是 Spring Framework 中用于支持国际化(Internationalization,简称 i…

Java程序的生命周期

ava程序的生命周期指的是程序从编写到结束的整个过程,可以分为以下几个阶段: 编写阶段:程序员使用Java语言编写程序,包括编写源代码、编译、调试等工作。 编译阶段:编译是将Java源代码转换成Java字节码的过程。Java源…

大模型入门指南

随着 ChatGPT 的到来,大模型[1](Large Language Model,简称 LLM)成了新时代的 buzzword,各种 GPT 产品百花齐放。 大多数人直接用现有产品就可以了,但对于喜欢刨根问底的程序员来说,能够在本地…

华为机考入门python3--(18)牛客18- 识别有效的IP地址和掩码并进行分类统计

分类:字符串 知识点: 字符串是否由数字组成 my_str.isdigit() 字符串填充 不足8位左侧填充0 my_str.zfill(8) 题目来自【牛客】 import sys def classify_ip(ip_mask): ip_class, is_private_ip, mask_class ignore_ip, 0, valid_mask# 解…