Java equals方法的良好设计
我看到了:
// Returns whether o refers to a Point object with
// the same (x, y) coordinates as this Point object
public boolean equals(Object o) {
if (o instanceof Point) {
Point other = (Point) o;
return x == other.x && y == other.y;
} else {
return false;
}
}
为什么要求equals方法的参数接受一个Point
对象不是更明智(也更简单)呢。然后,如果我们试图比较一个点和一个非点,那么编译器将捕获它。那不是更好吗
# 1 楼答案
因为这样它就不会覆盖^{} ,这是许多标准库算法用于检查两个对象相等性的方法
这些算法中的许多都可以对不同类型的对象进行操作,这就需要
equals
可以将您的对象与任何其他类中的一个进行比较# 2 楼答案
您可以在Apache Commons库中简单地使用EqualBuilder类。 https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/builder/EqualsBuilder.html
会是
# 3 楼答案
因为这打破了重写的第一条规则,并成为
Object
类的equals()
方法的重载方法重写规则: