> Java > java지도 시간 > Java의 `.equals()` 메소드에서 `instanceof` 또는 `getClass()`를 사용해야 합니까?

Java의 `.equals()` 메소드에서 `instanceof` 또는 `getClass()`를 사용해야 합니까?

Linda Hamilton
풀어 주다: 2024-11-27 01:23:13
원래의
265명이 탐색했습니다.

Should You Use `instanceof` or `getClass()` in Java's `.equals()` Method?

.equals() 구현에서 getClass()보다 인스턴스 오브 선호

Eclipse에서 .equals() 메서드를 생성할 때 개발자에게 다음이 제공됩니다. 객체 유형을 비교하기 위해 "getClass()" 또는 "instanceof" 사용 중에서 선택합니다. Eclipse는 기본적으로 "getClass()"를 사용하지만 일반적으로 대신 "instanceof"를 선택하는 것이 좋습니다.

instanceof를 선호하는 이유

  • Liskov 대체 원칙 준수: "getClass()"를 사용하면 객체 동일성을 정확한 객체로 제한합니다. 같은 수업. 이는 하위 클래스가 모든 측면에서 상위 클래스를 대체할 수 있어야 한다는 Liskov 대체 원칙을 위반합니다. 결과적으로 "getClass()"를 사용하면 클래스는 다르지만 논리 유형은 동일한 개체를 비교할 때 예기치 않은 동작이 발생할 수 있습니다.
  • 향상된 확장성: "instanceof"를 사용하면 . equals() 메소드는 서로 다른 하위 클래스의 객체 간의 동등성을 올바르게 식별할 수 있습니다. 이를 통해 동등 비교에 영향을 주지 않고 새로운 하위 클래스를 도입할 수 있으므로 코드의 확장성과 유연성이 향상됩니다.

Null 검사 모범 사례

null 검사를 수행하려면 "instanceof"를 사용할 때 "if (obj == null)" 문을 제거하는 것이 실제로 좋은 습관입니다. "instanceof"는 "obj"가 해당 클래스의 인스턴스임을 보장하고 null 객체는 어떤 클래스의 인스턴스도 될 수 없기 때문입니다.

지원 인수

"Effective Java"의 저자인 Josh Bloch는 .equals() 구현에서 "instanceof" 사용을 옹호합니다. 그는 이것이 Liskov 대체 원칙을 적절하게 준수하고 같음 메서드에 의존하는 컬렉션에서 예상치 못한 동작을 방지한다고 주장합니다.

이 접근 방식에 대한 추가 지원은 Stack Overflow에 대한 답변과 세 번째 항목에서 찾을 수 있습니다. Bloch의 저서 "Effective Java" 장

위 내용은 Java의 `.equals()` 메소드에서 `instanceof` 또는 `getClass()`를 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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