重写 Java 的 equals() 方法:要避免的陷阱
在 Java 中,equals() 方法在对象比较中起着至关重要的作用。如果做得不正确,重写此方法可能会充满陷阱。
作为一个恰当的例子,请考虑所描述的场景,其中使用采用 Book 参数的方法重写 equals() 会导致意外行为。这是因为 Java 固有的 equals() 方法被定义为采用 Object 参数,而不是像 Book 这样的特定类型。
示例中使用的 ArrayList 类采用重写的 equals() 方法来确定相等性对象之间(例如 contains() 和 equals())。但是,它不适用于重载的 equals() 方法(即采用特定类型参数的方法)。
正确的覆盖与重载
在这种情况下, public boolean equals(Book other) 是重载,而不是重写,因为它的参数类型与基于对象的 equals() 方法不同Object.
重写 equals() 的最佳实践
为了避免此类问题,建议在重写 equals() 时遵循以下最佳实践:
@Override public boolean equals(Object other){ if (other == null) return false; if (other == this) return true; if (!(other instanceof MyClass)) return false; MyClass otherMyClass = (MyClass)other; ...test other properties here... }
此模板提供了全面的检查用于 null、自引用和实例类型兼容性,确保正确的功能。
以上是为什么重写 Java 的 equals() 方法需要特别小心?的详细内容。更多信息请关注PHP中文网其他相关文章!