调用contains时,不能覆盖Java上的Equals方法

时间:2015-06-15 13:51:58

标签: java spring hibernate

我有以下功能,检查一个鳕鱼列表是否包含一个鳕鱼对象:

if (!concorrente.getJcodigoses().contains(cod)) 
        {
            return "redirect:" + referrer;
        }

我读到我需要像这样覆盖equals方法:

@Override
    public boolean equals(Object object)
    {
        boolean isEqual= false;

        if (object != null && object instanceof Jcodigos)
        {
            isEqual = (this.id == ((Jcodigos) object).id);
        }



        return isEqual;
    }

我将它放在我的Jcodigos.java类中,我注意到concorrente.getJcodigoses()。contains(...永远不会进入我的自定义equals方法......

有什么建议吗?

由于

答案:

我错过了以下方法

@Override
public int hashCode() {
    return this.id;
}

2 个答案:

答案 0 :(得分:3)

每当提供hashCode()方法时,您需要提供一个完整的equals()方法,反之亦然。

这样做的原因是在与集合中的对象交互时履行API契约。有关创建代码hashcode-equals

的提示,请访问该网站

Java Docs有关于要求的更多信息。正如关于equals方法的文档中所述:

  

请注意,通常需要覆盖hashCode方法   每当重写此方法时,都要保持一般   hashCode方法的契约,它声明了相等的对象必须   有相同的哈希码。

答案 1 :(得分:3)

您还必须实施hashCode