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());
}