重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

java中lombok出现危险的@Data怎么解决-创新互联

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

十年的临邑网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整临邑建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“临邑网站设计”,“临邑网站推广”以来,每个客户项目都认真落实执行。

前言

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

危险的@Data

子类不能完全代表父类

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

定义两种类,基类People,和两个子类Man和Woman

 @Data
 class Person {
 String name;
 }

 @Data
 //重写时带上父类字段
 @EqualsAndHashCode(callSuper = true)
 class Man extends Person {
 Boolean hunting;
 }

 @Data
 //重写equals时不会带上父类的字段,同种类型比较时,当子类字段相同时,结果就为true,这显然是不准确的.
 @EqualsAndHashCode(callSuper = false)
 class Woman extends Person {
 Boolean spin;
 }

分享标题:java中lombok出现危险的@Data怎么解决-创新互联
分享网址:http://cqcxhl.com/article/dsjejd.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP