java - 你可以有多个 hashcode 和 equals

标签 java

好吧,我需要指出正确的方向。我已经有了一个哈希码和一个具有覆盖功能的 equals 方法。

@Override 
public int hashCode() {         
    return  type.hashCode() ^ type2.hashCode() ^ type3.hashCode()  ;        } 

@Override 
public boolean equals(Object obj) { 
    if (!(obj instanceof MyObject)) {
        return false;
    }
    MyObject mdc = (MyObject) obj; 
    return mdc.type.equals(type) && mdc.type2.equals(type2) && mdc.type3.equals(type3); 
}

现在如果我只想比较第一种和第二种类型而不是第三种怎么办?我可以有两个 hash 和 equal 方法供以后使用吗?

我想要做的是,如果类型1和类型2匹配,则从当前数组列表中删除它们并将它们添加到新列表中,显示哪些是相同类型。这与上面显示的哈希码不同。

在数组中是否有另一种方法,我可以看到 type1 和 type2 的哪种组合出现多次?

例如:

  • 射击光环
  • 拍摄《使命召唤》
  • 极限竞速
  • ............
  • ......
  • ......
  • 射击光环

Shooting Halo 出现了两次,需要将它们删除并添加到另一个列表中,但问题是我已经有了以前使用的哈希码。

编辑:我要感谢大家的想法。我通过创建另一个对象类来解决这个问题,该对象类具有类似的 getter 和 setter,但具有更新的哈希码,并且它有效。下次我会使用更好的逻辑方法。我写这篇文章的主要目标是知道是否有任何方法可以在一个类中拥有多个哈希码和方法,这显然是不可能的。 :)

最佳答案

同一个类中不能有两个具有相同签名的方法,因此这是不可能的(这是 java 类/方法的常见原则,而不仅仅是 equalshashcode方法)。

正如Dennis Jia所评论的,如果你遇到这种情况,你需要重新考虑你的设计。

关于java - 你可以有多个 hashcode 和 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891831/

相关文章:

java - 每个线程一个 "Java context"?

java - 带有 gradle 的 Cucumber 应用程序在本地运行良好但在 Jenkins 上失败

java - 无法在另一个中导入java包

java - 使用泛型强制执行类声明

java - 如何使用 Jetty http 客户端 POST json 作为请求正文?

java - Java 8 是否支持插值

java - 我可以在 Java 中更改 URL 名称吗?

java - JSONArray 中元素的顺序

java - struts2 Action 中的验证异常

java - Android Gradle:未找到插件ID Java库