Lombok的使用

1、什么是lombok

lombok是一种实用的工具,可以用来帮助开发人员消除Java中的冗余代码,尤其是对于简单的Java对象(POJO),它通过注解达到这一目的。

2、Lombok常用注解

2.1 @Getter/@Setter

从名字上理解,相当于为成员变量生成对应的 get 和 set 方法,同时还可以指定修饰符【默认是public】

public class Dog {@Getter@Setterprivate Integer age;@Getter(AccessLevel.PROTECTED)private String name;
}

这两个注解还可以直接用在类上,可以为类里面的所有非静态成员变量生成对应的 get 和 set 方法

2.2 @ToString

本质就是生成toString方法【生成方法时会使用类中的非静态和非 transient 成员变量】

@ToString
public class Dog {private Integer age;private String name;
}

2.3 @EqualsAndHashCode

生成 equals 和 hashcode 方法,同时还会生成 canEqual 方法,用于判断某个对象是否是当前类及其子类的实例【生成方法时会使用类中的非静态和非 transient 成员变量】

@EqualsAndHashCode
public class Dog {private Integer age;private String name;
}

实际效果相当于:

public class Dog {private Integer age;private String name;public boolean equals(Object o) {if (o == this) return true;if (!(o instanceof Dog)) return false;Dog other = (Dog) o;if (!other.canEqual(this)) return false;Object this$age = this.age, other$age = other.age;if ((this$age == null) ? (other$age != null) : !this$age.equals(other$age)) return false;Object this$name = this.name, other$name = other.name;return !((this$name == null) ? (other$name != null) : !this$name.equals(other$name));}protected boolean canEqual(Object other) {return other instanceof Dog;}public int hashCode() {int PRIME = 59;result = 1;Object $age = this.age;result = result * 59 + (($age == null) ? 43 : $age.hashCode());Object $name = this.name;return result * 59 + (($name == null) ? 43 : $name.hashCode());}}

2.4 @NonNull

public class Dog {private static Integer age;private String name;public void setName(@NonNull String names){this.name = names;}
}

实际效果相当于:

public class Dog
{private static Integer age;private String name;public void setName(@NonNull String names) {if (names == null) throw new NullPointerException("names"); this.name = names;}
}

2.5 @NoArgsConstructor、@RequiredArgsConstructor 、@AllArgsConstructor

1.作用

@NoArgsConstructor:为该类产生无参的构造方法

@RequiredArgsConstructor:使用类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法

@AllArgsConstructor:为该类产生包含所有参数的构造方法

2.示例

@RequiredArgsConstructor(staticName = "sunfire")
@AllArgsConstructor
public class Dog {private static Integer age;@NonNullprivate String name;private String type;private final String res;
}

实际效果相当于:

public class Dog {private static Integer age;@NonNullprivate String name;private String type;private final String res;private Dog(@NonNull String name, String res) {if (name == null) throw new NullPointerException("name");this.name = name;this.res = res;}public static com.luoyu.aiyu.luo1.Dog sunfire(@NonNull String name, String res) {return new com.luoyu.aiyu.luo1.Dog(name, res);}@ConstructorProperties({"name", "type", "res"})public Dog(@NonNull String name, String type, String res) {if (name == null) throw new NullPointerException("name");this.name = name;this.type = type;this.res = res;}}

注意

  • 和前面几个注解一样,成员变量都是非静态的,另外,如果类中含有final修饰的成员变量,是无法使用@NoArgsConstructor注解的。
  • 三个注解都可以指定生成的构造方法的访问权限。
  • 第二个注解还可以用@RequiredArgsConstructor(staticName=”methodName”)的形式额外生成一个指定名称的静态方法,返回一个调用相应的构造方法产生的对象。

2.6 @Data

综合了@Getter、@Setter、@toString、@EqualsAndHashCode、@NoArgsConstructor注解。

如果同时加了@Data注解和@AllArgsConstructor注解,那么@Data注解提供的无参构造会被覆盖掉,所以建议在这二个注解同时存在的时候,建议再加一个@NoArgsConstructor注解。

2.7 @Slf4j

在类上面定义此注解,即可在类的方法中选择不同日志级别对应的方法打印日志:

//微量,少许的意思,级别最低;
log.trace()
//需要调试时候的关键信息打印;
log.debug()
//普通的打印信息(默认⽇志级别)
log.info()
//警告,不影响使⽤,但需要注意的问题;
log.warn()
//错误信息,级别较⾼的错误⽇志信息;
log.error()
//致命的,因为代码异常导致程序退出执⾏的事件。
log.fatal()

2.8 @Builder

可以自动为类生成一个建造者模式的实现,以链式调用的形式创建对象、添加属性来简化对象构建过程。要注意的是,如果在类上添加@Builder注解和@NoArgsConstructor注解会产生冲突,因为一方要求生成带参数的构造函数,另一方要求生成无参构造函数。但是,可以@Builder 、@AllArgsConstructor、@NoArgsConstructor三者可以同时使用。

import lombok.Builder;@Builder
public class User {private Long id;private String name;private Integer age;
}

实际效果:

public class User {private Long id;private String name;private Integer age;public User(Long id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public static UserBuilder builder() {return new UserBuilder();}public static class UserBuilder {private Long id;private String name;private Integer age;public UserBuilder id(Long id) {this.id = id;return this;}public UserBuilder name(String name) {this.name = name;return this;}public UserBuilder age(Integer age) {this.age = age;return this;}public User build() {return new User(id, name, age);}}
}

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

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

相关文章

JVM(java虚拟机 详解三个主要的话题:1.JVM 中的内存区域划分2.JVM 的类加载机制3.JVM 中的垃圾回收算法)

jdk java开发工具包 jre java运行时环境 jvm java虚拟机 JDK、JRE、JVM之间的关系? JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。…

在AI工业变革的拐点,迎来AI智算“安卓时刻”

今天,我们正在进入AI的工业变革拐点期。所谓AI的工业变革,主要指以大模型AI所引发的通用AI和以通用AI为目标构建的工业标准化AI智算基础设施。 在通用计算时代,X86所代表的工业标准化技术体系造就了企业IT、互联网与云数据中心。而在智算时代…

计网笔记:第1章 计算机网络概论

计网笔记:第1章 计算机网络概论 第1章 计算机网络概论1.1 计算机网络发展与分类1.2 OSI和TCP/IP参考模型OSI与TCP/IP参考模型图 1.3 数据封装与解封过程借助OSI模型理解数据传输过程(封装)借助OSI模型理解数据传输过程(解封) 1.4 本章例题 第1章 计算机网络概论 1.…

mac系统镜像源管理之nrm的安装与使用

之前有介绍过:pnpm安装和使用,nvm安装及使用,在前端开发中其实还有一个工具也会偶尔用到,那就是nrm,本文就详解介绍一下这个工具,非常的简单且好用~ 文章目录 1、什么是nrm?2、安装3…

Docker原理与基础命令

目录 一、云与虚拟化知识 (一)云基本知识 1.云基本介绍 2.常用的云服务器 3.云服务模型 3.1 IaaS 3.2 PaaS 3.3 SaaS (二)虚拟化介绍 1.什么是虚拟化 2. 虚拟化技术概述 3.虚拟化技术类型 4.虚拟化架构 ①寄居架构…

PostgreSQL中的索引类型有哪些,以及何时应选择不同类型的索引?

文章目录 索引 解决方案和示例代码 PostgreSQL提供了多种索引类型,每种类型都有其特定的应用场景和优势。选择合适的索引类型可以显著提高查询性能,减少数据库负载。 索引 以下是PostgreSQL中常见的索引类型及其适用场景: 1. B-tree 索引 …

对增加LLaMA 3 上下文长度技术的猜测

AI苏妲己: 在许多应用场景中,如长对话、长文档摘要或长期计划执行等,大语言模型能够支持较长的上下文窗口是非常理想的。以一次处理约50页书籍内容为例,通常需要模型支持32K个token的上下文长度。目前,主流的大语言模…

【题目2】 大衍数列,斐波拉契数列等,用VBA 和python解决

目录 0 原始题目:大衍数列 0.1 原始题目 0.2 知识点 1 大衍数列 1.1 大衍数列定义 1.1.1 大衍数列定义 1.1.2 大衍数列注意点 1.2 用VBA实现大衍数列 1.3 用python实现大衍数列 2 斐波拉契数列 /兔子数列/ 黄金分割数列 2.1 斐波拉契数列定义 2.1.1 下面…

【Linux】Kill Process 后依然占用显卡空间并显示 No Such Process

问题 : 如图所示,在显卡上使用 Crtl C 结束某个进程后,使用 nvitop 工具或者 nvidia-smi 命令,显示 No Such Process,但是确占用着显卡空间。搜索这个 PID 时,也显示找不到。 解决:实际上是因为…

BUUCTF——[网鼎杯 2018]Fakebook

BUUCTF——[网鼎杯 2018]Fakebook 1.测试SQl注入的注入点1 2.尝试使用-- -进行闭合,但是不行 3.尝试使用数字型的SQL注入,使用--进行注入后面的SQL语句 4.尝试使用and 11 判断其是否真的存在SQL注入 5.尝试使用and 12进行判断 6.发现这个地方确实存…

机器学习 | 使用Python开发多输出回归模型

多输出回归是监督机器学习的一种特殊形式,可以同时预测多个目标变量。虽然传统回归侧重于基于一组输入特征预测单个数值(目标变量),但多输出回归扩展了这一概念,可以同时预测多个数值,这在各种现实世界的应…

【产研测类】线上问题处理机制

1 概述 本规范致力于优化运营与产研团队在线问题管理的效率与效果,全面覆盖生产问题的识别、处理机制、分类分级、责任归属和明确奖惩机制。同时,侧重资源重点解决主流程关联的核心模块生产问题。如此,确保各个环节责任到人,内…

单细胞分析|整合 scRNA-seq 和 scATAC-seq 数据

引言 单细胞转录组学极大地提升了对细胞状态进行分类的能力,但要深入理解生物学现象,不能仅仅停留在对细胞群的简单列举上。随着新方法的不断涌现,用于测量细胞的不同状态,一个关键的挑战是如何将这些数据集整合起来,以…

Spring三级缓存源码解析

Spring三级缓存 前置知识三级缓存定义SpringBean生命周期 Bean的初始化getSingleton 分析加入一级缓存 CreateBean过程(A)A填充属性BB填充属性A,执行getSingleton(A)B完成初始化 前置知识 三级缓存定义 public class DefaultSingletonBeanRegistry ext…

云打印为什么这么便宜?

随着云打印的火热发展,越来越多的用户开始选择云打印服务了。我们在之前的内容里也介绍过,现在的易绘创云打印服务A4低至5分钱/页。那么云打印为什么这么便宜呢?今天小易就带大家来了解一下。 云打印为什么这么便宜? 相信很多用户…

Element-plus DatePicker 日期选择器【正则校验时间范围】

效果图&#xff1a; 利用element-plus中的form表单验证完成效果。 <el-form-item label"检查计划截止日期&#xff1a;" prop"deadline"><el-date-pickerv-model"form.deadline"value-format"YYYY-MM-DD"style"width: …

NAT的知识点和实现

1.NAT的作用&#xff1a; &#xff08;1&#xff09;、把内网私网IP转换公网IP&#xff1b; &#xff08;2&#xff09;、隐藏内网&#xff0c;起到保护内网作用&#xff1b; &#xff08;3&#xff09;、适当的缓解的IPv4地址空间枯竭&#xff1b; &#xff08;4&#xff…

【数据分析面试】28.查找职工信息 (SQL文字处理/通配符查找)

题目 现在公司里有职工信息表Worker, HR需要你提供不同的职工信息&#xff0c;包括&#xff1a; 从 Worker 表中获取 “FIRST_NAME” 并以大写形式显示。从 Worker 表中获取 DEPARTMENT 的唯一值。查找 Worker 表中 FIRST_NAME 的前三个字符。查找 Worker 表中名为 ‘Amitabh…

值传递和地址传递

文章目录 目录值传递地址传递 目录 值传递 package com.zhang.parameter; //值传递 public class MethodDemo1 {public static void main(String[] args) {int a 10;System.out.println(a);System.out.println("~~~~~~~~~~~~~~~");change(a);//无论你传入的是什么 …

备战Java面试

一&#xff0e;JAVA基础 1.八个基本数据类型&#xff0c;长&#xff0c;占几个字节&#xff0c;取值范围是多少。 基本类型&#xff1a; Byte 一般的数据 1个字节 取值范围 -128—127 short 极大的数据 2个字节 取值范围 -2的15次方到2的15次方减一 int 4个字节…