> Java > java지도 시간 > Java의 메소드 오버로딩이 런타임 매개변수 유형을 무시하는 이유는 무엇입니까?

Java의 메소드 오버로딩이 런타임 매개변수 유형을 무시하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-20 10:25:14
원래의
295명이 탐색했습니다.

Why Does Java's Method Overloading Ignore Runtime Parameter Types?

오버로드된 메서드 선택: 실제 매개변수 유형의 역할 이해

Java의 동적 메서드 디스패치 메커니즘에는 쉽게 간과될 수 있는 미묘한 차이가 있습니다. 이 기사에서는 메소드 선택에 대한 실제 매개변수 유형의 영향에 관한 구체적인 오해를 탐구합니다.

문제:

제공된 코드에서 Callee 인터페이스는 세 가지 오버로드된 메소드를 정의합니다. foo. 실제 "Integer i"로 foo를 호출할 때 foo(Integer i) 메서드가 선택될 것으로 예상됩니다. 그러나 관찰된 동작은 실제 매개변수 유형에 관계없이 foo(Object o)가 항상 실행된다는 것입니다.

설명:

예상과 달리 Java의 메소드는 선택 프로세스에서는 인수의 컴파일 타임 유형만 고려합니다. 이는 "런타임 유형 검사"로 알려진 개념인 실제 매개변수 유형을 기반으로 한 오버로드가 Java에서 지원되지 않음을 의미합니다.

공식 단어:

The Java 언어 사양은 다음과 같이 명시적으로 명시합니다.

When a method is invoked, the number of actual arguments (and any explicit type arguments) and **the compile-time types of the arguments** are used, at compile time, to determine the signature of the method that will be invoked.
로그인 후 복사

따라서 Java의 메소드 선택 메커니즘은 메소드로 전달된 객체의 실제 런타임 유형을 무시합니다.

의미:

이 동작은 중요한 의미를 가질 수 있습니다. 예를 들어, 다형성 객체 또는 클래스 계층을 처리할 때 실제 매개변수 유형을 기반으로 예상되는 오버로드 동작이 발생하지 않을 수 있습니다.

대안:

런타임 유형 검사의 경우 원하는 경우 Java는 다양한 객체 유형을 처리할 때 더 큰 유연성을 제공하는 리플렉션 및 제네릭과 같은 대체 메커니즘을 제공합니다.

위 내용은 Java의 메소드 오버로딩이 런타임 매개변수 유형을 무시하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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