You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用equals()方法比较两个独立的回调对象实例?

解决方案

由于你的ActionImpl类没有任何字段,所有实例在逻辑上是等价的,因此可以通过判断对象类型来实现equals方法,同时必须重写hashCode方法(遵循Java的equals-hashCode约定,否则集合类会出现异常行为)。

修改后的完整代码

import javax.annotation.Nullable;

interface Action {
    void apply();
}

class ActionImpl implements Action {

    @Override
    public void apply() {
        System.out.println("Hi from" + this);
    }

    @Override
    public boolean equals(@Nullable Object obj) {
        // 直接判断是否为ActionImpl类的实例
        return obj instanceof ActionImpl;
    }

    @Override
    public int hashCode() {
        // 所有实例返回相同哈希值,满足equals为true时hashCode一致的约定
        return ActionImpl.class.hashCode();
    }
}

public class Main {
    public static void main(String[] args) {
        Action action1 = new ActionImpl();
        Action action2 = new ActionImpl();
        System.out.println(action1.equals(action2)); // 输出 true
    }
}

关键说明

  • equals方法逻辑:因为类没有字段区分实例,所有ActionImpl的对象都视为相等,只需判断传入对象是否属于该类即可。
  • 重写hashCode的必要性:Java规范要求,若两个对象通过equals判断为相等,它们的hashCode必须相同。这里返回类的哈希值,确保所有实例的哈希值一致。
  • 后续扩展注意:如果之后给ActionImpl添加了字段,需要同步更新equals和hashCode的逻辑,否则会破坏相等性约定。

内容的提问来源于stack exchange,提问作者Ahmad Hamwi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:37