如何在不暴露字段的情况下实现equals?

时间:2016-08-01 15:06:39

标签: java

我们假设我有一个Dog类,其中包含一个字段private final int age和一个方法public Dog ageBy(Time time),每次调用时都会返回一个新的狗实例。 Dog课程不仅仅是不可变的,但没有任何get方法可以让它恢复年龄,换句话说,狗的合同不允许他说出他的年龄(为什么?因为没有会说话的狗),他只能“吠叫”,“睡觉”。并做其他狗的东西。

Dog可以按年龄与其他狗进行比较。为此,我需要覆盖public equals(Object o)类中的Dog方法。但问题在于没有办法比较它,因为我无法访问过去的狗。

问题:如何在不暴露任何对象字段的情况下实现equals方法?

2 个答案:

答案 0 :(得分:5)

任何方法都可以访问同一个类的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;
    }

答案 1 :(得分:2)

对象可以访问同一类别的其他对象的private个实例,因此您不需要equals中的getter。