热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

来自多个字段的JavahashCode

如何解决《来自多个字段的JavahashCode》经验,为你挑选了1个好方法。

鉴于这样一个类:

class MyObject {
  private String id1;
  private String id2;

  @Override
  public boolean equals(Object o) {
    if (o == this) return true;
    if (!(o instanceof MyObject)) {
        return false;
    }
    MyObject other = (MyObject) o;
    return id1.equals(other.id1) || id2.equals(other.id2);
  }
}

请注意,相等不依赖于两个字段匹配,两个字段都有效.什么是hashCode这个类的合适实现?



1> Andy Turner..:

这不是有效的实现equals.

具体而言,它违反了及物性要求.

因此hashCode,除了使所有实例具有相同的哈希码之外,您也无法实现"正确".


或者创建自己的类来为您执行这些操作,但不要假装是Set.
你不应该做那个抽象,而不是假装是一个`HashSet`或`Set`的东西.`Set`s应该只反映`equals`行为,_correct_,契约满足`equals`行为.
@mkohram扩展HashSet*从不*听起来像是正确的事情,特别是如果你正在改变现有方法的行为.
推荐阅读
author-avatar
沙尘jr暴的天下
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有