在我的IDE(eclipse neon)上运行jre 1.8。正如您在下面的代码片段中看到的那样,我开发了My Custom类来覆盖equals方法。这是因为当我从一组自定义类中执行removeAll方法时,我想使用我的重写版本。
查看jdk源代码,可以验证removeAll方法是否使用contains方法,而contains方法又使用Object类的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方法。
有什么不对?
由于
答案 0 :(得分:0)
要使其正常工作,您还需要覆盖hashCode
:
@Override
public int hashCode() {
return Objects.hash(getConnectionID());
}