Java:Lombok插件用法笔记

1、Lombok是什么东东?

官方介绍Lombok项目是一个Java库,它可以自动嵌入你的编辑器和构建工具中,从而减少你的代码量。永远不要再写另一个getter或equals方法,它带有一个注释的你的类有一个功能全面的生成器,自动化你的日志记录变量等等功能。简单来说就是使用Lombok,通过注解,让你不再需要编写getter、equals等属性方法,减少样板代码的编写、起到提升代码效率的功能。

2、IDEA如何安装Lombok

IDEA开发工具如果需要正常使用Lombok,就需要安装Lombok插件,这样IDEA就可以正常识别Lombok注解,从而可以正常编译项目。今天给大家介绍一下如何通过IDEA安装IDEA插件。

安装方法:

1、工具栏点击File→Settings设置界面→找到Plugins→找到Lombok插件然后点击install→重启IDEA,安装Lombok插件如下图:

2、点击File-- Settings设置界面,开启 AnnocationProcessors如下图:

开启 AnnocationProcessors目的是让Lombok注解在编译阶段起作用。

3、如何使用Lombok

3.1 添加依赖

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

4 、 Lombok常用用法示例

今天主要给大家罗列一下一些比较常用的lombok用法。

4.1 @Getter/@Setter

public class User {@Getter @Setterprivate Long id;
@Getter(AccessLevel.PROTECTED)private String phone;
private String password;}//编译后的代码public class User {private Long id;private String phone;private String password;public User() {    }public Long getId() {return this.id;    }public void setId(Long id) {this.id = id;    }protected String getPhone() {return this.phone;    }}

说明:@Getter @Setter 注解在类上,表示为类中的所有字段生成Getter&Setter方法。也可以使用@Data来代替@Getter @Setter,但是@Data会引入更多的注解。

4.2 @NonNull

作用:给字段赋值时(调用字段的setter方法时),如果传递的参数值为null,则会抛出空异常NullPointerException,生成setter方法时会对参数是否为空进行检查。

@Getter@Setterpublic class User {private Long id;@NonNullprivate String phone;}//编译后生成的代码public class User {private Long id;@NonNullprivate String phone;
public User() {    }public Long getId() {return this.id;    }public void setId(Long id) {this.id = id;    }@NonNullpublic String getPhone() {return this.phone;    }public void setPhone(@NonNull String phone) {if(phone == null) {throw new NullPointerException("phone");        } else {this.phone = phone;        }    }}

4.3. @NoArgsConstructor

作用:生成一个无参构造方法。当类中有final字段没有被初始化时,编译器就会报错,这个时候可用@NoArgsConstructor(force = true),然后为没有初始化的final字段设置默认值 0 / false / null, 这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请特别注意,正确初始化这些字段之前,这些约束是无效的。

@NoArgsConstructor(force = true)public class User {private Long id;
@NonNullprivate String phone;
private final Integer age;}// 编译后的代码public class User {private Long id;@NonNullprivate String phone;private final Integer age = null;public User() {    }}

4.4、@Data

作用:@Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能。

@Datapublic class User {private Long id;private String phone;private Integer status;}// 编译后的代码public class User {private Long id;private String phone;private Integer status;
public User() {    }
public Long getId() {return this.id;    }
public String getPhone() {return this.phone;    }
public Integer getStatus() {return this.status;    }
public void setId(Long id) {this.id = id;    }
public void setPhone(String phone) {this.phone = phone;    }
public void setStatus(Integer status) {this.status = status;    }
public boolean equals(Object o) {if(o == this) {return true;        } else if(!(o instanceof User)) {return false;        } else {            User other = (User)o;if(!other.canEqual(this)) {return false;            } else {                label47: {Long this$id = this.getId();Long other$id = other.getId();if(this$id == null) {if(other$id == null) {break label47;                        }                    } else if(this$id.equals(other$id)) {break label47;                    }
return false;                }String this$phone = this.getPhone();                String other$phone = other.getPhone();if(this$phone == null) {if(other$phone != null) {return false;                    }                } else if(!this$phone.equals(other$phone)) {return false;                }Integer this$status = this.getStatus();                Integer other$status = other.getStatus();if(this$status == null) {if(other$status != null) {return false;                    }                } else if(!this$status.equals(other$status)) {return false;                }
return true;            }        }    }
protected boolean canEqual(Object other) {return other instanceof User;    }
public int hashCode() {        boolean PRIME = true;        byte result = 1;Long $id = this.getId();        int result1 = result * 59 + ($id == null?43:$id.hashCode());        String $phone = this.getPhone();        result1 = result1 * 59 + ($phone == null?43:$phone.hashCode());        Integer $status = this.getStatus();        result1 = result1 * 59 + ($status == null?43:$status.hashCode());return result1;    }
public String toString() {return "User(id=" + this.getId() + ", phone=" + this.getPhone() + ", status=" + this.getStatus() + ")";    }}

4.5、@Log

作用:生成log对象,用于记录日志,可以通过topic属性来设置getLogger(String name)方法的参数 例如 @Log4j(topic = “com.xxx.entity.User”),默认是类的全限定名,即 类名.class,log支持以下几种主流日志:

  • @Log java.util.logging.Logger

  • @Log4j org.apache.log4j.Logger

  • @Log4j2 org.apache.logging.log4j.Logger

  • @Slf4j org.slf4j.Logger

  • @XSlf4j org.slf4j.ext.XLogger

  • @CommonsLog org.apache.commons.logging.Log

  • @JBossLog org.jboss.logging.Logger

@Logprivate static final java.util.logging.Logger log =java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4jprivate static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.class);
@Log4j2private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4jprivate static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4jprivate static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);@CommonsLogprivate static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLogprivate static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Logpublic class UserService {    public void addUser(){        log.info("add user");    }}import java.util.logging.Logger;public class UserService {    private static final Logger log =     Logger.getLogger(UserService.class.getName());    public UserService() {    }}

5、Lombok的优缺点

优点:可以大大减少代码量,使代码看起来非常简洁,大大提高的代码编写的效率。

缺点:

  • 需要添加IDEA插件、侵入性很高这个对同事不友好。

  • 代码量减少了,本质上是缺失代码的表现。

  • 调试起来会比较麻烦,如果想知道某个类的某个属性get方法被哪些类调用非常麻烦。

  • 不利于版本升级

  • 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度

6、总结

Lombok可以帮我们提高写代码的效率,使代码看起来更简洁,它也有不少的缺点不利于后续的运维等等。大家要根据项目的实际情况酌情考虑是否值得使用Lombok。

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

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

相关文章

bzoj2058: [Usaco2010 Nov]Cow Photographs(逆序对)

题目大意&#xff1a;给出n个数的序列&#xff0c;每次可以交换相邻的两个数&#xff0c;问把序列变成编号i在编号i1左边&#xff0c;编号1在编号n右边(一个环)最少需要多少步。如&#xff1a;35421最少交换两次变为34512。 一开始看到这题&#xff0c;只会O(n)&#xff0c;后来…

sap实施和开发哪个前景_2021年了!还不知道 SAP顾问的职业前景?

一、先说什么是SAP。百度词条的解释&#xff1a;SAP有两个意思一为“System Applications and Products”的简称&#xff0c;是SAP公司的产品——企业管理解决方案的软件名称。也代指SAP公司。二为SAP开发的ERP&#xff08;Enterprise-wide Resource Planning&#xff09;软件名…

Linux找最大最小值的命令,Linux中awk命令正确的求最大值、最小值、平均值、总和...

test.txt文件内容&#xff1a;911352142118求最大值&#xff1a;awk BEGIN {max 0} {if ($10 > max0) max$1} END {print "Max", max} test.txtMax 118求最小值&#xff1a;awk BEGIN {min 65536} {if ($10 < min0) min$1} END {print "Min", min}…

​分布式数据库技术基础:数据分布介绍

1、数据分布的定义数据分布是指在分布式环境中通过合理分布数据&#xff0c;提高数据操作自然并行度&#xff0c;以达到最优的执行效率的目的。在构建分布式数据库系统运行环境时&#xff0c;必须考虑数据如何分布在系统的各个场地上。数据分布主要关注的问题是在分布式数据中&…

uname命令 linux,Linux uname命令详解

Linux uname命令用于显示系统信息。uname可显示电脑以及操作系统的相关信息。语法参数&#xff1a;uname [参数]参数&#xff1a;-a或--all&#xff1a;显示全部的信息&#xff1b;-m或--machine&#xff1a;显示电脑类型&#xff1b;-n或-nodename&#xff1a;显示在网络上的主…

分布式数据库技术基础:数据分片介绍

1、数据分片定义数据分片也成为数据分割&#xff0c;是分布式数据库的特征之一。一般在一个分布式数据库中&#xff0c;全局数据库是由各个局部数据库逻辑组合而成的&#xff0c;反之各个局部数据库是由全局数据库的某种分割逻辑而得的。数据分片得到的各部分元组成为该关系的逻…

分布式数据库技术基础:分布透明性相关知识

1、分布透明性介绍数据分布独立性&#xff1a;主要是指用户或用户程序使用分布式数据库如同使用集中式数据库那样&#xff0c;不必关系全局数据的分布情况。也就是说全局数据的逻辑分片、片段的物理位置分配、各场地数据库的数据模型等情况对用户和用户应用程序是透明的。因此分…

宏基4750网卡驱动linux,宏基4750g网卡驱动下载

宏基4750g网卡驱动是宏基笔记本上网驱动&#xff0c;驱动可以帮助用户体验便捷上网功能&#xff0c;只需要的双击驱动安装就可以完成&#xff0c;网卡驱动是笔记本必备程序&#xff0c;欢迎用户来当易网下载体验&#xff01;驱动介绍Acer宏碁Aspire 4750G笔记本网卡驱动14.4.0.…

python request post 数组_[pve][python]用python3获取pve状态信息

手头的Proxmox VE集群和节点越来越多&#xff0c;需要考虑统一管理了&#xff0c;先定一个小目标——集中状态监控。以前写过检测ceph并用钉钉报警的bash脚本&#xff0c;这次换上洋气的方式&#xff0c;用python来通过pve的api获取其状态信息。首先参考proxmox官方的api(实际上…

分布式数据库管理系统介绍

1、分布式数据库管理系统分类综合型体系结构&#xff1a;主要是指在分布式数据库建立之前&#xff0c;还没有建立独立的集中式数据库管理系统&#xff0c;设计人员根据用户的需求&#xff0c;设计出一个全新的完整的数据库管理系统。联合型体系结构&#xff1a;主要是指每个节点…

linux中国用户,Linux中国 适合新用户的Linux

这个争论无疑给许多Linux用户带来了麻烦。争论的焦点一般不是哪个发行版是真正最适合新用户的&#xff0c;而是哪个发行版受这些争论者的喜爱。如果我们撇开个人喜爱&#xff0c;我们会看到更清楚的一面。但即使这样&#xff0c;明确的结论也会受到被新用户的需求和期望的影响。…

关于局部变量表slot的理解

看下图代码例子&#xff0c;double类型的b,占用两个slot,所以index为3和4

分布式查询处理和优化相关知识介绍

一、分布式数据库查询考虑的因素1、和集中式数据查询一样需要考虑查询语言语句的优化2、数据和信息均需要通过通信线路进行数据传输&#xff0c;存在传输延迟问题从而影响整个查询的执行效率。3、网络中多处理器的存在提供了并行数据处理和传输的机会&#xff0c;可以充分利用该…

操作数栈的字节码指令执行分析

一&#xff1a;写个demo 二&#xff1a;点击Recompile编译 三&#xff1a;使用javap命令反编译class文件 javap -v 类名.class 四&#xff1a;查看结果 五&#xff1a;分析执行过程 首先bipush意思是把byte类型的变量i的值15存放到操作数栈中&#xff0c;istore_1的意思…

分布式数据库基础:分布式事务相关概念介绍

1、事务的定义事务式访问数据库的一个逻辑工作单位&#xff0c;它属于一个操作序列&#xff0c;执行这个操作序列使数据库从一种一致状态转换到另外一种一致状态&#xff0c;从而实现特定业务的功能。2、分布式事务的定义分布式事务属于传统事务的扩展&#xff0c;分布式事务继…

windows比linux差在哪,怎么让新手理解Linux比Windows好在哪里!

pingpang2008 于 2009-06-17 08:54:31发表:人好多啊hantu 于 2009-06-16 23:28:57发表:哈哈,偏偏很多人就是不爽windows了才用Linux的刘冲 于 2009-06-16 21:44:08发表:linux比windows好吗&#xff1f;wayoking 于 2009-06-16 20:45:11发表:理解了&#xff0c;谢谢cscs2002 于 …

大型分布式存储方案MinIO介绍,看完你就懂了!

1、MinIO是什么&#xff1f;官方解释&#xff1a;MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;…