应该所有类都有一个 .equals 和 .hashcode 方法



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

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

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

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

在这里,似乎没有问题 - 如果你打算使用 assertEquals ,你需要实现一个equals方法。如果你要实现它,你可能还应该实现hashCode以便将来证明你的代码免受偷偷摸摸的、难以发现的错误的影响。

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

最新更新