> Java > java지도 시간 > 내 Java 'equals()' 메서드 재정의가 컬렉션과 함께 실패하는 이유는 무엇입니까?

내 Java 'equals()' 메서드 재정의가 컬렉션과 함께 실패하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-27 15:12:10
원래의
600명이 탐색했습니다.

Why Does My Java `equals()` Method Override Fail with Collections?

Java의 Equals() 메서드 재정의: 난해한 문제 해결

Java에서 equals() 메서드를 재정의할 때 예상치 못한 문제가 발생할 수 있습니다. 이 문서에서는 메소드가 오작동하여 실망스러운 디버깅 경험을 초래하는 특정 사례를 다룹니다.

요컨대, 이 문제는 equals() 메소드의 부적절한 재정의로 인해 발생했습니다. 특히, 이 메소드는 Object 클래스에서 상속된 메소드의 요구에 따라 Object 대신 Book 유형의 매개변수로 정의되었습니다.

객체 컬렉션을 처리하는 데 일반적으로 사용되는 Java 컬렉션 프레임워크는 재정의된 같음( ) 평등을 결정하는 방법. 그러나 제공된 코드 예제에서 Book 매개 변수가 포함된 오버로드된 equals() 메서드는 이 프레임워크와 호환되지 않았습니다. 결과적으로 컬렉션 내의 동일성 비교가 설명할 수 없이 실패했습니다.

이 혼란을 해결하려면 다음과 같이 equals() 메서드를 올바르게 재정의해야 합니다.

@Override
public boolean equals(Object other) {
    if (other == null) return false;
    if (other == this) return true;
    if (!(other instanceof Book)) return false;
    Book otherBook = (Book) other;
    ...test other properties here...
}
로그인 후 복사

이 코드 조각은 같음을 재정의합니다. () Object 유형의 매개변수를 사용하는 Object 클래스의 메소드입니다. 또한 @Override 주석은 메서드가 슈퍼클래스 메서드를 올바르게 재정의하는지 확인하기 위한 컴파일 시간 검사를 제공합니다.

오버로딩과 재정의 사이의 미묘하지만 중요한 차이점을 해결함으로써 프로그래머는 비슷한 함정을 피하고 정확한 동등성을 유지할 수 있습니다. Java 코드를 비교합니다.

위 내용은 내 Java 'equals()' 메서드 재정의가 컬렉션과 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿