一些基本类上实用的注解及例子

news2024/11/23 13:07:05

文章目录

  • 一些基本类上实用的注解及例子
  • 一、@Data
  • 二、@Accessors
  • 三、@AllArgsConstructor
  • 四、@NoArgsConstructor
  • 五、@EqualsAndHashCode
  • 六、后面在补充!先这样吧,哈哈!
  • 总结


一些基本类上实用的注解及例子


一、@Data

@Data 注解是一个组合注解,它相当于同时使用了 @ToString, @EqualsAndHashCode, @Getter / @Setter 和 @RequiredArgsConstructor 这几个注解。也就是说,当你在一个类上使用 @Data 注解时,Lombok 会自动生成这个类的 toString 方法、equals 和 hashCode 方法,以及所有非 static 和非 transient 字段的 getter 和 setter 方法。
示例:

import lombok.Data;  
  
@Data  
public class User {  
    private String name;  
    private int age;  
}

上述代码会自动生成 name 和 age 字段的 getter 和 setter 方法,以及 toString、equals 和 hashCode 方法。

二、@Accessors

@Accessors 注解用于配置字段的访问器的行为。当设置 chain = true 时,setter 方法会返回 this,这样就可以实现链式调用。
示例:

import lombok.Data;  
import lombok.experimental.Accessors;  
  
@Data  
@Accessors(chain = true)  
public class User {  
    private String name;  
    private int age;  
}

使用上述代码,你可以这样链式地设置字段的值:

User user = new User().setName("Alice").setAge(30);

这样,你可以更简洁地编写代码,提高可读性,并减少出错的可能性。但请注意,链式调用并不总是最佳实践,它主要适用于某些特定的场景,比如构建器模式或者当你需要连续设置多个字段的值时。在其他情况下,使用传统的 setter 方法可能更为清晰。

三、@AllArgsConstructor

@AllArgsConstructor 注解用于生成一个包含类中所有字段的构造器。这在你需要为所有字段提供初始值时非常有用。
示例:

import lombok.AllArgsConstructor;  
  
@AllArgsConstructor  
public class User {  
    private String name;  
    private int age;  
}

上述代码会自动生成以下构造器:

public User(String name, int age) {  
    this.name = name;  
    this.age = age;  
}

四、@NoArgsConstructor

@NoArgsConstructor 注解用于生成一个无参数的构造器。如果你不希望为类中的任何字段提供初始值,或者字段已经有默认值(例如,基本类型或它们的包装类默认为 0 或 null),那么这个注解会非常有用。
示例:

import lombok.NoArgsConstructor;  
  
@NoArgsConstructor  
public class User {  
    private String name;  
    private int age;  
}

上述代码会自动生成以下构造器:

public User() {  
}

五、@EqualsAndHashCode

@EqualsAndHashCode(callSuper = false) 是 Lombok 库中的一个注解,用于自动生成一个类的 equals() 和 hashCode() 方法。这个注解对于确保对象在比较时能够正确识别其唯一性非常有用,特别是在集合(如 HashSet 或 HashMap)中存储对象时。

参数 callSuper 用于控制生成的 equals() 和 hashCode() 方法是否应该调用超类(父类)的相应方法。设置为 false 意味着不会调用超类的 equals() 或 hashCode() 方法。

具体解释如下:

callSuper = false:默认情况下,Lombok 生成的 equals() 和 hashCode() 方法不会考虑超类的字段。这意味着只有当前类中的字段会被用于比较和生成哈希码。这适用于那些不继承其他实体类或者其超类不包含重要识别信息的类。
如果你有一个类继承自另一个包含重要识别字段的类(比如一个基类包含了一个主键字段),你可能希望生成的 equals() 和 hashCode() 方法也考虑这些字段。在这种情况下,你应该将 callSuper 设置为 true。

@EqualsAndHashCode(callSuper = true)  
public class ChildClass extends ParentClass {  
    private String someField;  
    // getters, setters, etc.  
}  
  
public class ParentClass {  
    private Long id;  
    // getters, setters, etc.  
}

在上面的例子中,ChildClass 继承了 ParentClass,并且 ChildClass 使用了 @EqualsAndHashCode(callSuper = true)。这意味着当比较两个 ChildClass 对象是否相等时,不仅会考虑 someField 字段,还会考虑从 ParentClass 继承的 id 字段。同样地,生成的 hashCode() 方法也会基于这两个字段的值来计算哈希码。

总之,@EqualsAndHashCode(callSuper = false) 使得 Lombok 生成的 equals() 和 hashCode() 方法只考虑当前类中的字段,而不考虑从超类继承的任何字段。

六、后面在补充!先这样吧,哈哈!

总结

@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
在这里插入图片描述

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

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

相关文章

Django源码之路由的本质(上)——逐步剖析底层执行流程

目录 1. 前言 2. 路由定义 3. 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析 5. 小结 1. 前言 在学习Django框架的时候,我们大多时候都只会使用如何去开发项目,对其实现流程并…

linux 软中断入门

在 linux 中,任务执行的载体有很多,包括线程,中断,软中断,tasklet,定时器等。但是从本质上来划分的话,任务执行的载体只有两个:线程和中断。软中断和 tasklet 的执行可能在中断中&am…

云服务器8核32G配置报价大全,腾讯云、阿里云和京东云

8核32G云服务器租用优惠价格表,云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价,腾讯云和京东云是轻量应用服务器,阿里云是云服务器ECS: 阿里云8核32G服务器 阿里云8核32G服务器价格…

9.动态规划——2.最大序列和

例题——最大序列和 找状态 思路一() 定义一个状态 d p [ i ] dp[i] dp[i],计为前i个数构成子序列和的最大值 此法状态转移比较困难,即若 d p [ i ] dp[i] dp[i]与 d p [ i − 1 ] dp[i-1] dp[i−1]没有明确的关系,有…

获取电商数据的几种方法分享

在数字化时代,电商数据已经成为企业决策的重要依据。无论是市场趋势的洞察、用户行为的分析,还是产品优化和营销策略的制定,都离不开电商数据的支持。本文将分享几种获取电商数据的有效方法,力求在干货满满的同时,也不…

PyCharm中出现Microsoft Defender配置建议

原因 Windows安全中心的病毒和威胁防护会自动扫描电脑中的文件夹,我们的项目文件夹和IDE文件夹也会被扫描,而PyCharm认为这会降低IDE性能。 解决方法 直接点击提示框里的自动。 或是手动给扫描添加排除项,步骤如下: 1、先打开…

Sui原生功能如何改变链上游戏体验

从zkLogin到可编程交易区块(PTB),Sui的原生功能为游戏开发人员提供了工具,最终利用了Web3的力量,给玩家带来了新的体验和参与度。之前的区块链在支持链上游戏方面存在技术上的局限,但是Sui提供了开发人员所…

受益于边缘计算的三个关键应用

边缘计算和 5G 网络正在改变物联网,增强跨多个领域的广泛应用的功能,并催生大量新兴应用。我们通过研究三个突出的用例来说明边缘计算的强大功能。 工业4.0智能工厂 工业 4.0 为制造商提供了基于灵活的工业环境提高生产力和盈利能力的愿景,…

AR-Net网络(图像篡改检测)

AR-Net网络 摘要AbstractAR-Net1. 文献摘要2. 研究背景3. 创新点4. AR-Net 网络架构5. 实验6. 结论总结 摘要 AR-Net使用自适应注意力机制来融合位置和通道维度的特征,使网络能够充分利用不同维度的被篡改特征,此外,AR-Net 改进了预测掩模&a…

牛客NC92 最长公共子序列(二)【中等 动态规划 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11 思路 https://blog.csdn.net/qq_36544411/article/details/120021203 思路 动态规划法, 我们以dp[i][j]表示在s1中以第i个元素结尾,s2中以第j个元素结…

【JavaSE】初识线程,线程与进程的区别

文章目录 ✍线程是什么?✍线程和进程的区别✍线程的创建1.继承 Thread 类2.实现Runnable接口3.匿名内部类4.匿名内部类创建 Runnable ⼦类对象5.lambda 表达式创建 Runnable ⼦类对象 ✍线程是什么? ⼀个线程就是⼀个 “执行流”. 每个线程之间都可以按…

常见微服务的组件?

注册中心:就是一个服务注册的地方,我们可以把拆分的服务注册到注册中心,这样注册中心就能管理这些服务,服务之间的调用就会很方便,通过服务名就能相互调用。 负载均衡:被调用放的负载均衡,比如…

人工智能产业应用--具身智能

五、下一个浪潮 (一) 跳出缸中脑——虚实结合 在探索人工智能的边界时,“跳出缸中脑——虚实结合”这一概念提出了一个引人深思的视角,尤其是在具身智能的领域。具身智能是一种思想,强调智能体通过与其环境的直接物理互动来实现智能行为。然…

[MSSQL]理解SQL Server AlwaysOn AG的备份

AG提供了以下几种备份策略 下面来看看各项的解释 Prefer Secondary(首选辅助副本) 应在辅助副本上执行此可用性组的自动备份。如果没有可用的辅助副本,将在主副本上执行备份。 这个选项只是概念上的选项。基本上,用户可以从任何复制节点上执行备份命令。 我们可以在主副本…

Django DRF视图

文章目录 一、DRF类视图介绍APIViewGenericAPIView类ViewSet类ModelViewSet类重写方法 二、Request与ResponseRequestResponse 参考 一、DRF类视图介绍 在DRF框架中提供了众多的通用视图基类与扩展类,以简化视图的编写。 • View:Django默认的视图基类&…

数据结构堆

前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识——数据结构中的二叉树,今天我们先来学习二叉树中堆的知识,这部分内容还是非常有意思的,下面我们…

设计模式学习笔记 - 设计模式与范式 -行为型:2.观察者模式(下):实现一个异步非阻塞的EventBus框架

概述 《1.观察者模式(上)》我们学习了观察者模式的原理、实现、应用场景,重点节介绍了不同应用场景下,几种不同的实现方式,包括:同步阻塞、异步非阻塞、进程内、进程间的实现方式。 同步阻塞最经典的实现…

【 书生·浦语大模型实战营】学习笔记(一):全链路开源体系介绍

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、…

【Linux】TCP网络套接字编程+守护进程

文章目录 日志类(完成TCP/UDP套接字常见连接过程中的日志打印)单进程版本的服务器客户端通信多进程版本和多线程版本守护进程化的多线程服务器 日志类(完成TCP/UDP套接字常见连接过程中的日志打印) 为了让我们的代码更规范化&…

鸿蒙实战开发-如何使用声明式UI编程框架的基础组件

介绍 在本教程中,我们将通过一个简单的样例,学习如何使用声明式UI编程框架的基础组件。本篇Codelab将会使用Image组件、Slider组件、Text组件共同实现一个可调节的风车动画,实现效果如图所示 相关概念 Text组件:文本组件&#x…