>Java >java지도 시간 >아이템 과부하를 신중하게 사용하세요

아이템 과부하를 신중하게 사용하세요

王林
王林원래의
2024-09-06 06:00:02747검색

과부하 문제:

  • CollectionClassifier 프로그램의 예에서와 같이 메소드 오버로딩은 런타임이 아닌 매개변수 유형을 기준으로 컴파일 타임에 호출할 메소드를 선택하므로 예상치 못한 동작이 발생할 수 있습니다.

오버로드와 덮어쓰기:

  • 오버로딩은 컴파일 시 메서드를 선택하는 반면, 재정의는 런타임 시 유형을 기반으로 올바른 메서드를 선택하므로 동작을 더 예측하기 쉽습니다.

혼란스러운 오버헤드 방지:

  • 오버로딩은 매개변수 집합에 대해 어떤 메서드가 호출될지 명확하지 않을 때 프로그래머를 혼란스럽게 할 수 있습니다. 이는 공개 API에서 특히 문제가 됩니다.

권장사항:

  • 매개변수 수가 동일한 두 개의 오버로드를 내보내지 마세요.
  • 오버로드하는 대신 메소드 이름을 다르게 지정하세요(예: writeInt 및 writeBoolean).
  • varargs를 사용할 때 오버로드를 피하세요.

제네릭 및 오토박싱의 경우:

  • Java에 제네릭과 오토박싱을 도입하면 List.remove의 예에서 볼 수 있듯이 여러 오버로드로 인해 혼란스럽게 동작할 수 있는 오버로드 문제가 발생했습니다.

기능적 인터페이스 및 람다:

  • Java 8에 람다를 추가하면 기능적 인터페이스를 사용하는 메소드를 오버로드하여 혼란의 위험이 높아졌습니다. 특히 해당 인터페이스가 "완전히 다르지" 않은 경우 더욱 그렇습니다.

실용적인 솔루션:

  • instanceof를 사용한 명시적 테스트는 오버로드와 관련된 문제를 피할 수 있습니다.
  • 획기적으로 다른 매개변수(서로 변환할 수 없는 유형)를 사용한 오버로드는 혼란을 방지합니다.
  • 생성자 및 오버로드: 생성자는 항상 오버로드되지만 정적 팩토리를 사용하면 이러한 복잡성을 일부 피할 수 있습니다.

정당한 예외:

  • 이전 클래스를 조정하는 등 일부 경우에는 오버로드가 필요할 수 있지만 오버로드된 메소드가 동일한 매개변수로 호출될 때 동일하게 작동하도록 주의해서 사용해야 합니다.

결론:

  • 오버로드는 자제해서 사용해야 합니다. 기술적으로는 가능하지만 더 명확하고 예측 가능한 코드를 보장하기 위해 메소드 이름을 다르게 지정하거나 혼동되는 오버로드를 피하는 것이 더 나은 경우가 많습니다.

책의 예:

Item  Utilize a sobrecarga com critério

Item  Utilize a sobrecarga com critério

Item  Utilize a sobrecarga com critério

Item  Utilize a sobrecarga com critério

Item  Utilize a sobrecarga com critério

위 내용은 아이템 과부하를 신중하게 사용하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.