实体上的注解@EqualsAndHashCode

Lombok @EqualsAndHashCode 的用法

1. 此注解会生成equals(Object other) 和 hashCode()方法。

2. 它默认使用非静态,非瞬态的属性

3. 可通过参数exclude排除一些属性

4. 可通过参数of指定仅使用哪些属性

5. 它默认仅使用该类中定义的属性且不调用父类的方法

6. 可通过callSuper=true解决上一点问题。让其生成的方法中调用父类的方法

另:@Data相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。

详细可参考:Lombok @EqualsAndHashCode 的用法 - 白眉大虾 - 博客园 (cnblogs.com)

当启动@EqualsAndHashCode时,默认不调用父类的equals方法,当做类型相等判断时,会遇到麻烦,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Data
public class People {
    private Integer id;
}
 
@Data
public class User extends People {
    private String name;
    private Integer age;
}
 
public static void main(String[] args) {
    User user1 = new User();
    user1.setName("jiangxp");
    user1.setAge(18);
    user1.setId(1);
 
    User user2 = new User();
    user2.setName("jiangxp");
    user2.setAge(18);
    user2.setId(2);
 
    System.out.println(user1.equals(user2));
}
 
输出结果:true

需要将@EqualsAndHashCode修改为@EqualsAndHashCode(callSuper = true)才能得到正确结果.
反编译修改后的User.class,发现有些许变化

posted on   南瓜小子  阅读(562)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示