내 IDE (eclipse neon)에서 jre 1.8을 실행 중입니다. 아래 스 니펫 코드에서 볼 수 있듯이 equals 메서드를 재정의하는 My Custom 클래스를 개발했습니다. 그것은 내 custom 클래스의 Set에서 removeAll 메서드를 실행할 때 오버라이드 된 버전을 사용하려고하기 때문에 발생합니다.Java 1.8 overridden equals() 콜렉션 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를 오버라이드 (override)하는 경우, 일관성을 유지하려면 hashCode를 오버라이드 (override) 할 필요가 있습니다. 이것은 아마도 당신의 문제 일 것입니다. –
[왜 Java에서 equals 및 hashCode 메서드를 재정의해야합니까?] (http://stackoverflow.com/questions/2265503/why-do-i-need-to-override-the-equals-and) -hashcode-methods-in-java) –