java中lombok出现危险的@ data怎么解决

  

java中lombok出现危险的@ data怎么解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

我们问题lombok是可以精简我们的代码的,让开发人员把精力放在业务上,而它封装的注解我们在使用时,需要多注意一下,@ data注解它是一个混合注释,它包含了@ getter @ setter @RequiredArgsConstructor @ToString @EqualsAndHashCode的功能,而我们问题@EqualsAndHashCode是重写=和散列的注释,如果你是一个类,那可以不关心它;而如果你的类中有继承(父类子类),那么就要注意一下了。

<强>子类不能完全代表父类

@EqualsAndHashCode注解里有个字段callSuper,它的默认值是false,意思是在重写时,不会将父类的字段写到等于里;而@ data这个注解由于包含了@EqualsAndHashCode,所以它也有这个特性,即子类强制实现了重写equals和hashCode,并且只重写了自己的属性,这时,问题就来了,当两个对象比较时,如果子类属性相同而父类属性不同,结果也为真,这是非常严重的错误。

定义两种类,基类的人,和两个子类男人和女人

 @ data
  类人{
  字符串名称;
  }
  
  @ data//重写时带上父类字段
  @EqualsAndHashCode (callSuper=true)
  类人延伸{
  布尔狩猎;
  }
  
  @ data//重写=时不会带上父类的字段,同种类型比较时,当子类字段相同时,结果就为真,这显然是不准确的。
  @EqualsAndHashCode (callSuper=false)
  类女人人{延伸
  布尔旋转;
  }

测试的结果,我们是可以猜出来的,父类里的字段不相同时,结果应该为false,但如果@EqualsAndHashCode (callSuper=false),结果竟然是真的,这也是正常的,因为它并没有重写父类的属性名称,所以只要子类字段相同,结果就认为相同了。

 @Test
  公共空间supperSubEqual () {
  人=new()人;
  man.setName (“zzl");
  man.setHunting(真正的);
  人男士一=new ();
  man1.setHunting(真正的);
  man1.setName (“lind");
  log.info(“==男士一人,# 63;{}“man.equals(男士一));//错误
  
  女人女人=new女人();
  woman.setName (“zzl");
  woman.setSpin(真正的);
  女人女士一=new女人();
  woman1.setSpin(真正的);
  woman1.setName (“lind");
  log.info(“女人==女士一,# 63;{}“woman.equals(女士一));//正确的
  }

癹ava中lombok出现危险的@

在使用@ data时,我们尽量把<代码> @EqualsAndHashCode (callSuper=true) 加上,因为你不加,它相当于是假,或者杜绝使用@ data,而用@ getter, @ setter, @ToString代替它。

关于java中lombok出现危险的@ data怎么解决问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

java中lombok出现危险的@ data怎么解决