zl程序教程

您现在的位置是:首页 >  其他

当前栏目

lombok中@EqualsAndHashCode注解的使用

2023-04-18 14:04:52 时间

现有Person实体类,具有名字和身份号码两个属性,身份证号可代表数据的唯一性。

    class Person{
        private String name;
        private String identity;
        
        public Person(String name, String identity) {
            this.name = name;
            this.identity = identity;
        }
        //省略get/set方法
     }

需求: 我需要比较两条数据中是否为同一个人

根据姓名查找,会从数据库中返回多条名字相同的数据,那么我们需要使用身份证号去判断名字相同的多个对象是否为同一个人,哪么只需要使用身份证号码判断即可。

Person person1 = new Person("name1","001");
Person person2 = new Person("name2","002");
log.info(person1.equals(person2));

如果这样比较的话,一定会返回false 那么这个时候可以使用@EqualsAndHashCode.Exclude注解忽略掉name字段,从equals和hashCode的实现中排除name字段。

    class Person {
        @EqualsAndHashCode.Exclude
        //new 两个对象  身份证数据一致 但是名字不一样  使用equals比较两个对象返回false
        //可以使用lombok的该注解修饰name字段,从equlas和hashCode中忽略name字段
        private String name;
        private String identity;

        public Person(String name, String identity) {
            this.name = name;
            this.identity = identity;
        }
    }

再执行便仅仅根据id进行比较两个对象啦。

lombok在继承中使用时,默认实现没有父类属性。 解决方案:

@EqualsAndHashCode(callSuper = true)