欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > @EqualsAndHashCode注解使用

@EqualsAndHashCode注解使用

2024/10/25 0:24:23 来源:https://blog.csdn.net/wangerrong/article/details/141723775  浏览:    关键词:@EqualsAndHashCode注解使用

一,@EqualsAndHashCode注解来自于Lombok

@EqualsAndHashCode 是 Lombok 库提供的一个注解,用于自动生成 equals 和 hashCode 方法。这两个方法在 Java 中非常重要,特别是在集合框架中使用时,它们确保了对象的正确比较和哈希值的一致性。


二,为什么使用 @EqualsAndHashCode注解

1,减少样板代码:手动编写 equals 和 hashCode 方法非常繁琐且容易出错。
2,提高代码可读性:使用 Lombok 自动生成这些方法可以让类的定义更加简洁。
3,保证一致性:Lombok 自动生成的方法遵循 Java 官方推荐的最佳实践。

三,如何使用 @EqualsAndHashCode

1,引入依赖: 在项目的 build 文件中添加 Lombok 依赖。例如,在 Maven 的 pom.xml 文件中添加:

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version> <!-- 选择最新版本 --><scope>provided</scope></dependency>
</dependencies>

2,应用注解: 在类定义上加上 @EqualsAndHashCode 注解。可以指定不同的选项来自定义生成的方法。
 

3,常见选项
of:指定哪些字段用于生成 equals 和 hashCode 方法。
callSuper:是否调用父类的 equals 和 hashCode 方法。
exclude:排除某些字段不参与生成。
doNotUseGetters:是否使用 getter 方法获取字段值,默认为 false。


4,示例

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;@Getter
@Setter
@EqualsAndHashCode(of = {"name", "age"}) // 指定使用 name 和 age 字段
//@EqualsAndHashCode(exclude = {"email"}) // 排除掉email字段,和上面一行选一个就行
public class User {private String name;private int age;private String email; // 不参与 equals 和 hashCode 计算// 其他方法和逻辑
}// 使用示例
public class Main {public static void main(String[] args) {User user1 = new User();user1.setName("张三");user1.setAge(25);user1.setEmail("zhangsan@example.com");User user2 = new User();user2.setName("张三");user2.setAge(25);user2.setEmail("zhangsan1@example.com");System.out.println(user1.equals(user2)); // 输出 trueSystem.out.println(user1.hashCode() == user2.hashCode()); // 输出 true}
}


四,注意事项

1,字段顺序:@EqualsAndHashCode 默认按照字段声明的顺序进行处理,因此字段顺序可能会影响结果。
2,性能问题:如果类中有大量字段,生成的 equals 和 hashCode 方法可能会比较复杂,影响性能。
3,继承关系:如果类有继承关系,需要考虑是否调用父类的 equals 和 hashCode 方法。

五,总结

通过使用 @EqualsAndHashCode,可以显著减少代码量并提高代码的可维护性和一致性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com