对于内部类的不同实例,hashCode可以是相同的吗?

时间:2013-09-04 14:35:14

标签: java

我有一个自定义SwingWorker内部类。我发现他们的哈希码有几次对于它的不同实例是相同的。这是为什么?正常?

编辑:

我拥有的内部类是SwingWorker类的子类。

1 个答案:

答案 0 :(得分:7)

对于不同的对象,散列码不需要不同。唯一的要求是对于相同的对象它们必须是相同的。

如果担心您的SwingWorker内部类产生相同的哈希码,则可以覆盖内部类中的hashCode方法,以提供更适合您需求的哈希码。当然,您还需要覆盖equals以便为两种方法提供匹配的逻辑:

final int workerId = 123;
SwingWorker<String,Object> myWorker = new SwingWorker<String,Object> {
   @Override
   public String doInBackground() {
       ...
   }
   @Override
   protected void done() {
       ...
   }
   @Override
   public int hashCode() {
       return workerId;
   }
   @Override
   public boolean equals(Object other) {
       return other == this;
   }
}