假设我有一个Dog类,它有一个字段private final int age和一个方法public Dog ageBy(Time time),每次调用时都会返回狗的新实例.一个Dog班级不仅是不可改变的,而且没有任何get方法可以让它恢复年龄,换句话说,狗的合同不允许他说出他的年龄(为什么?因为没有会说话的狗),他只能'吠叫', '睡觉',做其他狗的东西.
但Dog可以按年龄与其他狗进行比较.为此,我需要覆盖类中的public equals(Object o)方法Dog.但问题是没有办法比较它,因为我无法访问过往的狗年龄.
问题:如何在不暴露任何对象字段的情况下实现equals方法?
任何方法都可以访问private同一个类的字段,因此您可以编写equals直接访问字段,而无需getter.
这是一个例子:
public class Point {
private int x;
private int y;
public Point (int x, int y) {
this.x = x;
this.y = y;
}
public boolean equals(Object obj) {
// Test for null, and type
...
Point p = (Point) obj;
return x == p.x && y == p.y;
}
Run Code Online (Sandbox Code Playgroud)