Java 1.8 переопределено equals(), не вызываемое Collection removeAll()

На моем IDE (Eclipse Neon) я бегу JRE 1,8. Как вы можете видеть в приведенном ниже фрагменте кода, я разработал класс My Custom, переопределяющий метод equals. Поэтому я хочу использовать свою переопределенную версию, когда я выполняю метод removeAll из набора моего пользовательского класса.

Заглянув внутрь исходного кода jdk, можно убедиться, что метод removeAll использует метод contains, который, в свою очередь, использует метод equals класса Object.

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 никогда не вызывается.

Что это не так?

Спасибо

1 ответ

Решение

Для правильной работы необходимо переопределить hashCode также:

@Override
public int hashCode() {
    return Objects.hash(getConnectionID());
}
Другие вопросы по тегам