在我的IDE(eclipse neon)上运行jre 1.8。正如你在下面的代码片段中看到的,我开发了My Custom类来覆盖equals方法。这是因为我想使用我的覆盖版本,当我从我的自定义类的集执行removeAll方法。Java 1.8覆盖equals()未被Collection调用removeAll()
查看jdk源代码的内部,可以验证removeAll方法是否使用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方法永远不会被调用。
这是什么错误?
感谢
您正在使用什么样的一整套实施?请注意,如果您覆盖equals,则应该重写hashCode以保持一致。这可能是你的问题。 –
可能的重复[为什么我需要重写Java中的equals和hashCode方法?](http://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and -hashcode-methods-in-java) –