gpt4 book ai didi

java - 有效Java : should I override equals() and hashCode() if the objects I'm creating are never compared with each other?

转载 作者:行者123 更新时间:2023-12-02 07:53:18 24 4
gpt4 key购买 nike

如果我创建的对象不用于比较例如list.contains(new Employee("MM")) ,以及这些对象是否仅存储在 List 中从数据库返回,例如 List<Employee>employeeList = employeeService.getEmployeeList();那么我需要覆盖 equals()hashCode()Employee类?

最佳答案

不,如果您不需要自定义相等性定义,则无需重写 .equals().hashCode()。只要您打算将类的每个实例视为与其他实例不相等,默认值就可以正常工作。您可以将此类对象存储在List中,甚至可以存储在基于哈希的集合中,例如HashMapHashSet - 这两个类都没有问题默认的Object 等价概念。

此外,对于许多类,您不应该重写这些方法。许多常见的设计模式将包含并不打算等效的类,例如 factories , singletons ,和state machines 。为此类类定义自定义的相等概念可能会引入奇怪的错误,或者至少只是不必要的样板文件。

另一方面value types ,或者专门用于某种数据的结构化表示的类应该几乎总是重写 .equals().hashCode() (并且可能实现 Comparable ),因为这是此类类的用户可能所期望的。 Auto/Value项目使创建此类值(value)类型变得非常轻松;如果这就是您正在构建的类的类型,我强烈鼓励您使用它。

关于java - 有效Java : should I override equals() and hashCode() if the objects I'm creating are never compared with each other?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com