首页 > 解决方案 > 实现相同接口的类的 hashCode

问题描述

我有(至少)两个实现相同接口并具有相同字段的类。如果这两个类的字段相同或应该不同,是否可以使用相同的哈希码?这段代码可以吗?

interface Base { }

class A implements Base {
  private Integer value;

  public A(Integer value) { this.value = value; }

  public int hashCode() { return value.hashCode(); }
}

class B implements Base {
  private Integer value;

  public B(Integer value) { this.value = value; }

  public int hashCode() { return value.hashCode(); }
}

标签: java

解决方案


我遇到过类似的情况。基本上,实现(我有两个)看起来完全一样。

如果我只使用了一个类,那么当在另一个地方使用时,类名会造成混乱。因此,我继续进行了两个课程以提高可读性。

示例:使用的钩子prepost某些东西的初始化导致创建两个类PreInitPostInit. 但是,当时的要求是在初始化前和初始化后做同样的事情。但是,在不久的将来,这种情况会发生变化,每个人都会有不同的逻辑。

两个不同的对象可以有相同的哈希码,这没有什么问题(只要你照顾好equals

请参阅: 具有相同哈希码的两个不相等对象


推荐阅读