Java 1.8 覆盖的 equals() 未被 Collection removeAll() 调用

Java 1.8 overridden equals() not called by Collection removeAll()

在我的 IDE (eclipse neon) 我是 运行 jre 1.8。正如您在下面的代码片段中看到的,我开发了 My Custom class 覆盖 equals 方法。那是因为当我从我的一组自定义 class.

中执行 removeAll 方法时,我想使用我的覆盖版本

查看 jdk 源代码可以验证 removeAll 方法使用 contains 方法,而后者又使用对象 class.

的 equals 方法
public class MyClass {
    private String connectionID;


    public MyClass (){      
    ...
    }


    @Override
    public boolean equals(Object obj) {      
        if (obj instanceof MyClass ){
            if (((MyClass )obj).getConnectionID().equalsIgnoreCase(this.getConnectionID())){
                return true;
            }
        }
        return false;
    }
...
}



public class MyClassContainer{

    private Set<MyClass> classes = new HashSet<>();

    public Set<MyClass> getClasses () {
        return this.classes ;
    }

}

public class Main (){

    private void method(MyClassContainer contClass) {

    if (true){
        Set<MyClass> temp = some valid Set;         
        temp.removeAll(contClass.getClasses());
    }

}

启动这段代码我意识到永远不会调用重写的 equals 方法。

怎么了?

谢谢

要使其正常工作,您还需要覆盖 hashCode

@Override
public int hashCode() {
    return Objects.hash(getConnectionID());
}