Java中Lombok常用注解分享
作者:冷小风的IT生活 发布时间:2023-06-13 01:32:48
以前的Java项目中充斥了太多不友好的代码:POJO的Getter/Setter/toString等等,这些代码由于没有什么技术含量,影响了代码的美观等缺点,让Lombok应运而生。
Our-task介绍
本篇博客是我的github上项目our-task:一个完整的清单管理系统的配套教程文档,大家感兴趣的话,可以去看看
安装Lombok
加入Maven依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
IDEA中安装Lombok插件
依次点击:FIle-Settings-Plugins,从插件栏中搜索Lombok进行安装,安装之后勾选Lombok启动即可。
注解介绍
@Getter和@Setter
放在类上,为该类的所有属性自动生成Getter和Setter方法
import lombok.Getter;
import lombok.Setter;
/**
* @program: our-task
* @description: 学生类
* @author: water76016
* @create: 2020-12-15 10:57
**/
@Getter
@Setter
public class Student {
int id;
String name;
int age;
}
@ToString
自动重写toString方法,和我们平时使用IDEA编辑器自动生成的一样
/**
* @program: our-task
* @description: 学生类
* @author: water76016
* @create: 2020-12-15 10:57
**/
@ToString
public class Student {
int id;
String name;
int age;
}
@EqualsAndHashCode
自动生成equal(Object other)和hashCode()方法,如果某些变量不想要加入该注解,可以使用exclude进行排除
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class Student {
int id;
String name;
int age;
}
import lombok.EqualsAndHashCode;
//把name属性排除在外
@EqualsAndHashCode(exclude = "name")
public class Student {
int id;
String name;
int age;
}
问:为什么把生成equal(Object other)和hashCode()方法弄成一个注解,而不是分开使用?
答:在Java中有规定:当两个对象相等时,它们的hashcode是一定相等的。但是,当两个对象的hashcode相同,对象不一定相等。这样做是为了防止违反Java规定的情况发生。
@NoArgsConstructor
生成一个不包含任何参数的无参构造器
import lombok.NoArgsConstructor;
@NoArgsConstructor
public class Student {
int id;
String name;
int age;
}
@AllArgsConstructor
生成一个包含所有参数的构造器
import lombok.AllArgsConstructor;
@AllArgsConstructor
public class Student {
int id;
String name;
int age;
}
@RequiredArgsConstructor
为“特定参数”生成构造器,这里的“特定参数”,特指那些加上final修饰词的属性
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Student {
int id;
final String name;
int age;
public static void main(String[] args) {
Student student = new Student("33");
}
}
这里我们只为name加上final修饰,可以发现,我们只生成了一个包含name属性的构造器。另外,如果所有的属性都没有final修饰的话,使用@RequiredArgsConstructor会生成一个无参的构造器。
@Data
这是一个组合注解,加了这个注解,相当于加入了@Getter、@Setter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这五个注解。
@Value
这也是一个组合注解,但是会把所有的变量都设置为final的,其他的就和@Data一样了。等同于加入了@Getter、@ToString、@EqualsAndHashCode和@RequiredArgsConstructor这四个注解(由于所有属性是final的,所以没有@setter注解了)。
@Builder
流式的set值写法,不过毕竟是给属性赋值,基本的setter还是需要有的,一般来说,@Builder会和@Data一起使用。
import lombok.Builder;
import lombok.Data;
@Builder
@Data
public class Student {
int id;
String name;
int age;
public static void main(String[] args) {
Student student = Student.builder().id(1).name("water").age(18).build();
}
}
@Slf4j
自动生成该类的log静态常量,就可以直接打印日志了,不用去new一个log的静态常量了。
@Slf4j
public class Student {
int id;
String name;
int age;
public static void main(String[] args) {
log.info("hello world");
}
}
来源:https://juejin.cn/post/7224145268738949179


猜你喜欢
- 本文实例讲述了C#时间戳基本用法。分享给大家供大家参考。具体如下:一、C#如何生成一个时间戳/// <summary> ///
- 记得在 MS Build 2020 大会上,C# 语言开发项目经理 Mads Torgersen 宣称 C# 9.0 将会随着 .NET 5
- 一. 线性表中的顺序表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见
- 八皇后问题(N皇后问题)的回溯法求解一、问题描述在一个国际象棋棋盘上放置八个皇后,使得任何两个皇后之间不相互攻击,求出所有的布棋方法,并推广
- 前言在最近的一个项目需要用JAVA来解析DICOM图片,DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共
- 大部分Java开发者都在使用Map,特别是HashMap。HashMap是一种简单但强大的方式去存储和获取数据。但有多少开发者知道HashM
- 前两年写的东西,现在整理一下发出来!以前公司需要做WebService,并且对WebService的SoapHeader进行加密,所以就写了
- Android设备用久了,截屏是个麻烦事。更麻烦的是通过qq传到电脑上,倒腾半天。其实用adb命令就可以截屏,然后写个pull的语句就可以拉
- 本人在spring中使用redis作为缓存时,遇到两个坑,现在记录如下,算是作为自己的备忘吧,文笔不好,望大家见谅;一、配置文件<!-
- 饿汉式立即加载防止new对象,构造私有,写一个公共的方法返回对象占用空间,线程安全public class Singleton { &nbs
- 投篮小游戏规则,点击投篮目标点,就会有一个球沿着相关抛物线,然后,判断是否进入篮子里,其实就是一个矩形,直接是按照碰撞检测来的,碰到就算进去
- 问题:在Spring Boot中使用JpaRepository的deleteById(ID id)方法删除数据时,首先要使用existsBy
- Android 消息分发使用EventBus的实例详解1. AndroidStudio使用dependencies {//最新版本 &nbs
- 本文实例为大家分享了C#实现计算器窗体程序的具体代码,供大家参考,具体内容如下功能设计1、计算器中,添加 0-9 共十个数字键。2、计算器中
- 背景工作中遇到业务诉求是通过OpenCV对图片进行一些判断操作和优化,这里是看了部分不错的文章,希望总结一个自己的学习过程,温故而知新,有不
- java 弹幕小游戏的最初版本,供大家参考,具体内容如下最近在学习javaSE,根据b站视频老师的讲解,也参考了他的代码,做了一个弹幕小游戏
- 方法一 滑动屏幕 可重新显示出来protected void hideBottomUIMenu() { //隐藏虚拟
- FloatingActionButton项目在github上的主页:https://github.com/futuresimple/andr
- java 基础之JavaBean属性命名规范问题JavaBean属性名要求:前两个字母要么都大写,要么都小写下面我们来找找如果不遵循这个规范
- 前言我们知道在Java中除了基础的数据类型以外,其它的都为引用类型。而Java根据其生命周期的长短将引用类型又分为强引用、软引用、弱引用、幻