龙空技术网

IDEA上提升生产力的插件--lombok

攻城狮Bilbo 94

前言:

现时同学们对“idea引入lombok插件”大致比较注意,咱们都想要剖析一些“idea引入lombok插件”的相关知识。那么小编也在网上网罗了一些对于“idea引入lombok插件””的相关资讯,希望大家能喜欢,咱们快快来学习一下吧!

在Java项目中,经常要写大量的get,set,toString()等方法,尤其是类的属性比较多时,比较浪费时间,这时候就推荐一个Intellij Idea上的一个神器Lombok。

Lombok使用方法

首先在Idea上安装插件lombok如下图所示:

IDEA安装lombok插件

在项目中引入依赖,以Maven为例:

maven引入lombok依赖

这样就准备就绪了,接下来可以在项目中使用lombok了。lombok主要是用注解的方法代替原来对象中需要手动实现的get,set,toString()等方法。当然不仅限于这些。

常用注解

常用注解如下图所示:

lombok常用注解

changchangyyog

使用例子

定义一个简单的Person类,如下所示:

Person类

调用方法:

Main方法

第3行代码用于验证注解@NoArgsConstructor是否生成无参构造函数;

第4行代码用于验证注解AllArgsConstructor是否生成包含全部参数的构造函数;

第5到8行说明@Builder注解可以自动生成建造者模式代码,使得我们可以采用链式调用创建对象;

第9,10行调用了@Data生成的toString方法;

第11,12行调用了@Data生成的hashCode方法;

第13行调用了@Data生成的`euqals方法;

第14行是注解@Data附赠的一个方法,用于判断某个对象是否属于当前类的实例。

看下执行结果:

代码执行结果

lombok中坑

第一个坑是关于@EqualsAndHashCode的。

对于没有显式的继承父类且使用了@EqualsAndHashCode(callSuper = true) 注解的类,这个类由lombok生成的equals()方法只有当两个对象是同一个对象时才会返回true,不是同一个对象永远返回false,这个方法在大部分时间不符合预期,我们一般期望当全部属性相同或者部分属性相同时返回true。

解决办法:如果没有显式的继承其他类,则不要加callSuper = true,或者自己重写eauqls()方法。

第二个坑是关于@Data

上面的第一个坑在@Data中也会遇到,处理方法与上面类似,同时在这里会遇到一个新的问题:当我们写的类显示的继承一个父类时,@Data生成的equals()方法无法比较父类的属性,也就是相当没有调用父类的equals()方法。

解决办法:使用@EqualsAndHashCode(callSuper = true)或则会自己重写eauqls()方法。

第三个坑是关于@Builder

在我们写的类显示的继承某个类的时候,在类上加@Builder无法通过链式调设置父类的属性。例如下图我们定义一个Man这个类,继承自上文中的Person类,当在Man这个类中尝试使用链式调用设置父类Person类中的name和age属性时会报错,Man类定义如下图所示

Man类

解决方法:不使用lombok中的@Builder,自己用其他的方式实现建造者模式。或者其它同学有好的办法可以告诉我。

其实lombok适合继承关系单一的类,最好不要有继承关系。

当然还有一些其他的坑,这里就不一一列举,我一时半会儿也没想起来。

lombok到底该不该用?

这其实是有争论的,我个人认为是可以适度的使用。

但是lombok存在一些弊端,需要根据实际情况去权衡一下。

如果团队中一个人用lombok,其它人都要使用。这个问题其实可以解决,IDEA中有delombok的功能,可以将注解转化为代码。但是将注解转化为代码似乎又违背了我们使用lombok简化代码的初衷。代码可读性和调试性降低,这个同样采用1中的方法解决。影响升级。如果我们需要升到一个新的JDK,而恰巧lombok不支持这个版本的JDK,这时候就比较尴尬了。lombok中存在一些坑,新手如果不熟悉很容易掉坑里半天爬不出来。

总之,lombok确实是一款提升生产力的利器,但是同时也存在一些弊端,团队可以根据自己实际情况权衡如何使用。

标签: #idea引入lombok插件 #idea中的lombok插件 #idea导入lombok插件