美文网首页
@Data 在父子实体类之间的细节之处

@Data 在父子实体类之间的细节之处

作者: 技术指北 | 来源:发表于2021-11-21 11:42 被阅读0次

简述

@Data 注解是Lombok开源项目下的一个注解,只需在实体类上加一个这一个注解,即可快速拥有属性的get、set方法、必须参数的构造方法、重写后的tostring、equals、hashCode方法,省去了大量代码,使得代码简洁,提高开发效率。

问题

父子实体类都使用了@Data后,子类在比较值方面的使用,会有点欠缺,如同样的值使用equals判断却返回false。

下面我们通过实践截图,直观了解一下。

实践

定义两个实体类User、Child;

@Data
public class User {
    private String username;
    private String userId;
}

@Data
public class Child extends User{
    //不加任何属性
}

编写一个测试用例:

class HelloControllerTest {
    @Test
    void get() {
        User user = new User();
        user.setUsername("道友");
        Child child = new Child();
        child.setUsername("道友");
        System.out.println(user.equals(child));
    }
}
//输出:false
image.png

再实例一个child2对象:

class HelloControllerTest {
    @Test
    void get() {
        User user = new User();
        user.setUsername("道友");

        Child child = new Child();
        child.setUsername("道友");

        Child child2 = new Child();
        child2.setUsername("道友2");
        System.out.println(child.equals(child2));
    }
}
//输出:true     ---正确结果应该是false

此时修改一下Child实体类:

@EqualsAndHashCode(callSuper = true)  //加了此注解
@Data
public class Child extends User{
}

再测试,输出:

image.png
注意:@EqualsAndHashCode(callSuper = true) 只解决了子类实例之间的值比较问题,
未能解决父子之间的问题。

相关文章

网友评论

      本文标题:@Data 在父子实体类之间的细节之处

      本文链接:https://www.haomeiwen.com/subject/fewptrtx.html