所有类都应该有.equals和.hashcode方法吗?

时间:2017-05-26 15:42:48

标签: java methods equals hashcode

我正在进行一个单元测试项目,其中断言调用.equals方法。然而,之前项目中的人员没有生成这些方法。

在编码时自动生成这些方法是否被视为最佳做法?所有程序员都应该这样做吗?

我正在搜索有关.equals和.hashcode方法的更多信息,其中大多数似乎都是针对如何实现或覆盖它们。

2 个答案:

答案 0 :(得分:2)

这主要是品味问题 - 如果您不希望使用equals方法(例如,不使用assertEquals,请不要使用这个类作为Map等中的一个键,写它意味着你可能正在编写死代码,而一些约定会主张避免它。

在这里,似乎不是一个问题 - 如果您打算使用assertEquals,则需要实施equals方法。如果你要实现它,你可能也应该实现hashCode,以便将来证明你的代码不会偷偷摸摸,很难找到,错误。

答案 1 :(得分:0)

自动生成这些方法会引导我们进行一些标准实现。一个标准实现在Object中编码:比较链接和本机哈希码计算。 除非您能想象适合项目中所有实体的其他标准实现,否则您可能会自动生成等于和哈希代码:当您了解未来比较的所有条件时,手动实现它。