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

Java重写hashCode报找不到Objects符号及equals添加inventor比对问题

报错修复:cannot find symbol: variable Objects

该报错是因为未导入java.util.Objects工具类,你需要在类文件的头部(包声明之后,类定义之前)添加导入语句:

import java.util.Objects;

注意Objects类是JDK 7及以上版本才提供的内置工具类,如果你使用的JDK版本低于7,需要手动实现哈希计算和相等判断逻辑。

equals方法添加inventor字段比对逻辑

首先你原有equals方法存在逻辑错误:if (o != null || getClass() != o.getClass())的判断条件写反,会导致空指针异常且判断逻辑完全错误,修正并添加字段比对后的完整equals、hashCode实现如下:

修正后的equals方法

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    // 修正判断逻辑:o为null 或 类型不匹配时直接返回false
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    ThingMadeByHuman thingMadeByHuman = (ThingMadeByHuman) o;
    // 用Objects.equals比对字符串,避免inventor为null时抛出空指针
    return Integer.compare(thingMadeByHuman.yearOfInvention, yearOfInvention) == 0
            && Objects.equals(inventor, thingMadeByHuman.inventor);
}

同步修正hashCode方法

要遵循equals相等的两个对象hashCode必须相等的规范,hashCode也需要把inventor字段加入计算,同时不需要额外叠加super.hashCode(),避免破坏哈希值一致性:

@Override
public int hashCode() {
    return Objects.hash(inventor, yearOfInvention);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:00