【转载】新来个技术总监,禁止我们使用Lombok!
作者:Hollis在csdn
原文链接:https://blog.csdn.net/hollis_chuang/article/details/104259307我l e 5有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了F y x很多\"政策\",比如定义了很多开发规范、日志规范、甚至1 C X l l是要求大家统一使用某一款IDE。
但o U T V 0是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人x = d & c -信服的理由。
于是他来找我聊天,问我这个要求到底是否合理。关于这个事情,我认为这位技术总监的出发点是好的,但是做法未免有些极J % X 6 k $ W o h端。
之所以说出发点V R p n 1 # R r 3是好的,是因为使用Lombok^ O %确实会带来很多问题,而且我个人在工作H : , C中也基本不主动使用。
之所以说不主动( * z d / !使用,那是因为有些同事的代码还是使用了的,所以我也被迫的要安装Lombok的插件。
既然聊到这个话题,就简单说说我的一些看法。
Lombok有什么好处?
Lombok是一款非常实用Java工具,可用来帮助开发人员消除Java的冗长代码,尤其是对n & ] D s x i于简单的Java对象(POJO)。它通过注释实现这一目的。
如果大家对于Lombok比较了解的话,可以先跳@ Y g 5 E N ! %过这一段,直接往后看,如果不? ( X 3是很熟悉的话,可以简单了解一下。
想在项目中使用Lombok,需要三个步骤:
一、IDE中安装Lombok插件
目前Lombok支持多种IDE,其中包括主流的Eclips、Il v 9ntellji IDEA、Mye: 3 i $ lclipse等都是支持的。
在IDEA中安装方式如下:
!
二、导入相关依赖
Lombok 支持使用多重构建工具进行导入依赖,目前主要支持maven、gardle、ant等均支持) n d & y d 1。
如使用maven导入方式如下:
<dependency>
<grou; V 4 C 1pId>org.projectlombok</groupId>
<artifacti s e $ 4 B EId>lombok</artifactId>
<version>1.18.12</version>_ - . ` U;
<sco` e 6 k j - ope>provided</scope>
</depende2 ) Oncy>三、代码中使用注解
Lombok精简- h S ; g 6 X B代码的方式主要是通过注解来实现,其中常用的有@Data、@Getter/@Setter、@Builder、@NonNull等。
如使用@Data注解,即可简单的定义一个Java Bean:
import lombok.Data;
@Data
public class Menu {
private String shopId;
private String skuMenuId;
privateF T ~ i t j t M B String skuName;
}使用@Data注解在类T @ ? + X } r b m上S x : r D,相当于同时使用了@ToString、@K A YEqualsAndHashCode、@Getter、@Setter和@RequiredArgsw 6 l a Y 8 u l eConstrutor这些注解,对于POJO类十分有用。
即自动帮忙o . * v给T 0 e w t L a ~ -例子中的Menu类中定义了toString、Getter、Setter等方法。
通过上面的例子,大家可以发现,我们是使用@Data注解大大减少了代码量,使代码非常简洁。这也是很多开发者热衷于使用Lombok的主要原因。
另外,关于Lombok的使用,不同人有不同的看法,因为很多人都使用过Lombok,对于他的优点都比较了解,所以接下来! + - = ! : % M我们重点说一下Lombok的使用会带来哪些问题。
Lombok有什么坏处?
强X队友
因为Lombok的使用要求开发者一定要在IDE中安装对应的插件。
如果未安装插件的话,使用IDE打开一个基于Lombok的项目的话会提示找不到方法9 2 m ^ ; n等! * u b 9 / o 1 (错误。导致项目编译失败。
也就是& K 1 ] B h [ Z n ] /义一个类的时候,会自动帮我们生成equals()方法 。
但是如果只使用了@Data,而不使用@EqualsAndHashCode(callSuper=true)的话,会默认是@EqualsAndHashCode(callSuperH . m * M n D=false),这时候生成的equals()方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放。
这就可能得[ V H M Q S w 用,我其实保持一个中立的态度,不建议大家过度依赖,也不要求大家一定要彻底不用。
只要大家在使用的过程中,或者评估要不要在代码中引入Lombok之前,在想到他的优点的同时,能够考虑到他给代码带来的问题的,那么本文的目的也就达到了!