Lombok:简化JavaBeans的神器

前言

Lombok 是一个 Java 库,它通过注解的方式帮助我们自动生成构造器、getter/setter、equals、hashCode、toString 等方法,极大地简化了 JavaBean 的编写。对于经常需要编写大量的样板代码的工作来说,Lombok 提供了一种优雅的解决方案。

一、Lombok 注解概览

以下是一些常用的 Lombok 注解:

  1. @Data
    这是一个组合注解,相当于同时使用了 @ToString@EqualsAndHashCode@Getter / @Setter@RequiredArgsConstructor。它会生成所有字段的 getter/setter 方法,以及重写 equals 和 hashCode 方法,并提供一个包含所有非静态、非_transient 字段的构造函数。

  2. @Value
    类似于 @Data,但是它会生成不可变的类(所有字段默认为 final,且没有 setter 方法)。同时,它也会生成 equals 和 hashCode 方法,并添加一个全参数构造函数。此外,所有的字段都会默认加上 @NonNull 注解,确保对象实例化时不能有 null 值。

  3. @NoArgsConstructor, @RequiredArgsConstructor@AllArgsConstructor

    • @NoArgsConstructor 生成无参构造函数。
    • @RequiredArgsConstructor 生成包含所有 final 或者 @NonNull 注解字段的构造函数。
    • @AllArgsConstructor 生成包含类中所有字段的构造函数。
  4. @Getter@Setter

    • @Getter 会在每个字段上生成对应的 getter 方法。
    • @Setter 则是生成 setter 方法。
      如果你希望某个字段只生成 getter 不生成 setter,或者反过来,可以在该字段上单独使用这两个注解。
  5. @ToString
    自动为类生成 toString 方法,默认包含所有字段。可以通过 excludeof 参数指定包含或排除某些字段。

  6. @EqualsAndHashCode
    自动生成 equals 和 hashCode 方法,可以设置 callSuper 参数决定是否调用父类的方法,以及通过 exclude 参数排除某些字段。

  7. @SneakyThrows
    允许方法抛出未检查异常,而无需在方法签名中声明。这对于处理 IOException 等受检异常非常方便。

  8. @Cleanup
    在局部变量上使用此注解后,当离开当前作用域时,Lombok 将自动关闭这个实现了 Closeable 接口的对象,如 InputStream、OutputStream 等。

  9. @NonNull
    添加此注解的字段,在 Setter 方法中会被自动进行非空检查,如果传入null值则会抛出 NullPointerException。

以上就是 Lombok 中一些常见且实用的注解,使用它们可以大大减少重复代码,提高开发效率。但在使用前,请确保你的项目已经正确引入了 Lombok 插件并配置了 IDE 支持,否则可能会出现编译错误或提示找不到相应方法的问题。

二、Lombok 使用示例

import lombok.Data;
import lombok.NonNull;@Data
public class User {@NonNullprivate String name;private int age;// 仅 @Data 注解就足够生成以下代码// public String getName() { return this.name; }// public void setName(String name) { this.name = name; }// public int getAge() { return this.age; }// public void setAge(int age) { this.age = age; }// public User(String name, int age) { ... }// @Override// public String toString() { return "User{" + "name=" + name + ", age=" + age + '}'; }// ...
}

总结起来,Lombok 是一种强大的工具,它通过简洁的注解语法让我们能更专注于业务逻辑的实现,而不是被繁琐的模板代码所困扰。然而,过度依赖 Lombok 可能会使代码变得难以理解和维护,因此在实际项目中应适度使用。

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

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

相关文章

Linux内核--网络协议栈(四)sk_buff介绍

目录 一、引言 二、sk_buff ------>2.1、skb介绍 ------>2.2、控制字段 ------>2.3、其他字段 ------>2.4、特定功能字段 ------>2.5、管理字段 ------>2.6、内存分配 ------>2.7、内存释放 ------>2.8、克隆和拷贝 ------>2.9、队列管理…

通信入门系列——连续卷积定理、循环卷积、离散卷积定理

本节目录 一、连续卷积定理 1、时域卷积定理 2、频域卷积定理 二、循环卷积 三、离散卷积定理本节内容 一、连续卷积定理 卷积定理在信号分析中占有重要的地位,包括时域卷积定理和频域卷积定理。在信号分析领域,通常采用基于卷积定理的时频域分析&#…

Zuul1.x 高并发下阻塞分析以及解决方案

背景 由于最近博主在压测接口的时候发现我接口出现卡死状态,最开始以为是我自己接口出现问题,单独压测我自己的服务(不经过网关)200/qps/10 次循环 是没问题,但是加上网关(zuul 1.x) 去发现 经…

编曲学习:Cubase12导入Cubasis工程的方法!

Steinberg 发布 Cubasis 3 项目导入器,可将 Cubasis 的项目导入到 Cubase 使用https://m.midifan.com/news_body.php?id35635 我偶然看到这个文章,不过发现Cubase12默认好像没有这个选项,心想着要是移动端能和PC端同步,感觉会挺…

【网站项目】基于jsp的199旅游景点管理系统

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

C++中的排序操作:sort与自定义排序(自定义排序函数、匿名函数、运算符重载)

在C编程中,排序是一项常见而又重要的操作。本文将深入介绍C标准库中的sort算法,以及如何利用其强大的自定义排序功能满足各种排序需求。 sort算法简介 C标准库提供了sort算法,能够在O(N log N)的时间内对容器中的元素进行排序。这一高效的排…

快速下载百度网盘的文件——使用motrix

问题描述 下载速度慢 上传速度快 解决方案: Motrix 在该开源程序里面 选windows选择zip 启动之后 ,把百度网盘的链接转化成磁力链接。然后输入转化后的连接。转换的网页 每次设置下载认任务是选择高级选项里面的请求头 修改为LogStatistic 然后就能超…

“低绩效”指南

前言 一看这个标题,大家是否有个疑问,为啥是低绩效指南,而不是高绩效指南。可以这么说,能拿到高绩效的人大多有共通之处,然而获得低绩效的同学原因各不相同,针对笔者总结的一些经验或许能帮助大家反向操作…

Qt5编译MySQL数据驱动、部署MySQL服务器、Qt写代码连接MySQL数据库_案例介绍

一、前言 由于Qt 5在高版本中取消了对MySQL数据库的默认支持,要在QT里继续使用mysql需要自己编译库。本篇文章介绍Qt5(我用的Qt5.12.6)里如何编译MySQL的库文件,讲解在Linux下安装配置MySQL数据库,Qt编写代码连接上自己的MySQL数据库完成数据存储。 MySQL是一个开源的关…

Odrive 学习系列四:如何使用脚本自动初始化odrive配置

一、背景: 在学习markbase的教程后,发现odrive的初始化配置命令确实有点多。尽管odrive有自动补全: 且可以通过 ctrl + → 来快速补全: 但是对初学者而言,仍旧有比较大的工作量。 而针对于此,我们可以通过powershell脚本的方式来解决这个问题。 二、设计初始化…

接口测试 03 -- 接口自动化思维 Requests库应用

1. 接口自动化思维梳理 1.1接口自动化的优点 接口测试自动化,简单来讲就是功能测试用例脚本化然后执行脚本,产生一份可视化测试报告。不管什么样的测试方式,都是为了验证功能与发现 BUG。那为什么要做接口测试自动化呢?一句话概括…

【ARM 嵌入式 编译系列 2.1 -- GCC 预处理命令 #error 和 #warning 详细介绍 】

文章目录 #error 和 #warning#error示例 #warning示例 打印行号示例 #error 和 #warning 在C语言中,#error 和 #warning 预处理指令可以用于在编译时生成错误或警告信息,通常用于调试或当代码中某些条件未满足时提醒开发者。当这些指令被编译器处理时&a…

项目解决方案:多地医馆的高清视频监控接入汇聚联网

目 录 一、背景 二、建设目标及需求 1.建设目标 2.现状分析 3.需求分析 三、方案设计 1.设计依据 2.设计原则 3.方案设计 3.1 方案描述 3.2 组网说明 四、产品介绍 1.视频监控综合资源管理平台介绍 2.视频录像服务器和存储 2.1概述 2.2存储设计 …

51单片机流水灯

**led 介绍**LED是“Light Emitting Diode”的缩写,即发光二极管。它是一种半导体器件,能够将电能转化为可见光。LED灯通常由LED芯片、封装材料、铝基板和灯罩等部件组成。 **LED灯具有以下特点:** 节能:LED灯具有较高的光电转换…

oracle篇—19c新特性自动索引介绍

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…

Go 知识slice

Go 知识slice 1. 什么是slice2. slice 基础2.1 定义 2.2 实现原理2.2.1 make 创建2.2.2 切片 创建 2.3 操作2.3.1 append 追加2.3.2 表达式切片2.3.3 扩展表达式2.3.4 扩容2.3.5 拷贝 3. 测试一下3.1 len && cap3.2 append && 扩容3.3 切片表达式 1. 什么是sli…

Vue2移动端项目使用$router.go(-1)不生效问题记录

目录 1、this.$router.go(-1) 改成 this.$router.back() 2、存储 from.path,使用 this.$router.push 3、hash模式中使用h5新增的onhashchange事件做hack处理 4、this.$router.go(-1) 之前添加一个 replace 方法 问题背景 : 在 Vue2 的一个移动端开发…

/bin/rm Argument list too long – Linux 删除海量文件报错的解决方法

文章目录 /bin/rm Argument list too long – Linux”配合find与xargs完成删除海量文件使用find的delete选项 /bin/rm Argument list too long – Linux” 这种情况主要在大批量删除居多文件的情况下发生,也是因为删除的命令参数超过了shell参数的个数导致的&#…

Docker安装与启动

Docker概述 Docker是一个快速交付应用、运行应用的技术: 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器,各个应用互不干扰启动、移除都可以通过一行命令完成,方便…

kotlin Pair 和 Triple

在 Kotlin 中,Pair 和 Triple 是两种内建的数据类,用于表示固定数量的元素对和三元组 Pair Pair 类型是用来存储两个相关联值的数据类,它有两个属性:first 和 second。 val pairExample Pair("Apple", "Banana…