当前位置: 首页 > news >正文

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

文章目录

  • 一些基本类上实用的注解及例子
  • 一、@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() 方法只考虑当前类中的字段,而不考虑从超类继承的任何字段。

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

总结

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

相关文章:

  • 鸿蒙手机cordova-plugin-camera不能拍照和图片不显示问题
  • 给web开发零基础小白的简明入门教程
  • Go语言HTTP服务实现GET和POST请求的同时支持
  • 【EasyExcel】多sheet、追加列
  • win10下androidstudio的配置与gradle配置
  • npm 常用命令详解
  • 设计模式深度解析:AI如何影响装饰器模式与组合模式的选择与应用
  • 蓝桥杯刷题第四天
  • 排序——非基于比较的排序
  • Linux线程互斥
  • (C语言)球球大作战
  • Day54:WEB攻防-XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架
  • MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索
  • VMware虚拟机更换引导顺序
  • proteus+keil5仿真学习笔记(补充章 特殊功能寄存器上)
  • 前端开发神器之 VsCode AI 辅助插件 DevChat
  • SpringBoot 整合Redis第1篇
  • 计算机的组成原理
  • 软考系统架构设计师(摘抄)01
  • 分享一个nhanes数据报错的解决方案
  • 两部门部署中小学幼儿园教师招聘工作:吸纳更多高校毕业生从教
  • 公募基金解读“一揽子金融政策”:增量财政空间或打开,有助于维持A股活力
  • 正荣地产:公司控股股东已获委任联合清盘人
  • 巴基斯坦军方:印度向巴本土及巴控克什米尔发射导弹
  • 五一档7.47亿收官:《水饺皇后》领跑;男观众占比增多
  • 国铁集团:铁路五一假期旅客发送量累计已超1亿人次