假设我有一个Dog
类,它有一个字段private final int age
和一个public Dog ageBy(Time time)
方法,每次调用它都会返回狗的新实例。Dog
类不仅是不可变的,而且没有任何get
方法来返回它的年龄,换句话说,狗的合同不允许它说出它的年龄(为什么?因为没有会说话的狗),他只能“叫”,“睡觉”和做其他狗的事情。
但Dog
可以通过年龄与其他狗进行比较。为此,我需要覆盖Dog
类中的public equals(Object o)
方法。但问题是,没有办法比较它,因为我无法访问超过年龄的狗。
问:如何在不公开object的任何字段的情况下实现equals方法?
发布于 2016-08-01 15:09:32
任何方法都可以访问同一个类的private
字段,因此您可以编写直接访问这些字段的等号,而不需要使用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;
}
发布于 2016-08-01 15:08:56
一个对象可以访问同一类的其他对象的private
实例,因此在equals
中不需要getter。
https://stackoverflow.com/questions/38702246
复制相似问题