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 중국어 웹사이트의 기타 관련 기사를 참조하세요!