我需要在某些类A中实现equals方法。类A具有一个Enum类型的有序集合,而我想实现的行为是,对于集合中具有完全相同的Enum值的两个类A实例,equals返回true (位于集合的完全相同的位置)。

由于我是Java新手,因此遇到了问题,并且我不知道如何正确实现equals或hashcode方法,因此任何帮助都将是一件好事:)

最佳答案

如果您使用的是eclipse(与大多数Java IDE一样,netbeans具有类似的功能),则只需进入“源”菜单,然后选择“生成hashcode()和equals()”。然后,选择要考虑的字段(在您的情况下为枚举值列表)。

话虽如此,假设您已经有了枚举,这是eclipse为我生成的代码。并不是说哈希码通常涉及素数,以及乘法和加法。这往往会给您一些合理的价值分配。

public class Foo {
   private List<FooEnum> enumValues;

   @Override
   public int hashCode() {
       final int prime = 31;
       int result = 1;
       result = prime * result
               + ((enumValues == null) ? 0 : enumValues.hashCode());
       return result;
   }

   @Override
   public boolean equals(Object obj) {
       if (this == obj)
           return true;
       if (obj == null)
           return false;
       if (getClass() != obj.getClass())
           return false;
       Foo other = (Foo) obj;
       if (enumValues == null) {
           if (other.enumValues != null)
               return false;
       }
       else if (!enumValues.equals(other.enumValues))
           return false;
       return true;
   }


}

09-17 15:14