lombok @data 忽略属性_IDEA神器Lombok介绍与其中的坑

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

Lombok使用方法

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

b87702798393c409be0984d076468de3.png

IDEA安装lombok插件

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

951b4dc12681f4a0b4576d064f690852.png

maven引入lombok依赖

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

常用注解

常用注解如下图所示:

e0904cd56e7854d66f56b921e460a573.png

lombok常用注解

changchangyyog

使用例子

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

a0b9989bb5419b1c9c177bf4148d692e.png

Person类

调用方法:

37f1a90a49b07d0c0cff243d34386ccc.png

Main方法

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

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

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

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

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

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

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

看下执行结果:

cb0777caec58709cdda0e968afd93b80.png

代码执行结果

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类定义如下图所示

8280cc3e263f2f8ef0ba30c0e00cf476.png

Man类

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

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

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

lombok到底该不该用?

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

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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值