首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在不公开字段的情况下实现equals?

如何在不公开字段的情况下实现equals?
EN

Stack Overflow用户
提问于 2016-08-01 15:06:39
回答 2查看 66关注 0票数 1

假设我有一个Dog类,它有一个字段private final int age和一个public Dog ageBy(Time time)方法,每次调用它都会返回狗的新实例。Dog类不仅是不可变的,而且没有任何get方法来返回它的年龄,换句话说,狗的合同不允许它说出它的年龄(为什么?因为没有会说话的狗),他只能“叫”,“睡觉”和做其他狗的事情。

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

问:如何在不公开object的任何字段的情况下实现equals方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-01 15:09:32

任何方法都可以访问同一个类的private字段,因此您可以编写直接访问这些字段的等号,而不需要使用getter。

下面是一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
    }
票数 5
EN

Stack Overflow用户

发布于 2016-08-01 15:08:56

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38702246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文