모호한 Null 인수를 사용한 메서드 오버로딩
메서드 오버로딩에 Null 값을 허용할 수 있는 매개 변수가 포함된 경우 Java에서는 적절한 메서드를 선택하는 데 모호함이 발생할 수 있습니다. 호출합니다. 문제를 이해하기 위해 예를 살펴보겠습니다.
매개변수가 있는 다음 세 가지 메서드를 고려하세요.
public static void doSomething(Object obj) { System.out.println("Object called"); } public static void doSomething(char[] obj) { System.out.println("Array called"); } public static void doSomething(Integer obj) { System.out.println("Integer called"); }
doSomething(null)을 호출하면 컴파일러에서 "모호한 메서드"가 발생합니다. 오류. 그 이유는 세 가지 메소드 모두 null을 유효한 값으로 허용할 수 있기 때문입니다.
그러나 특히 Integer 및 char[] 메소드가 모두 존재하면 문제가 발생합니다. Object는 char[]의 상위 유형이므로 배열 버전이 Object 버전보다 더 구체적입니다. 따라서 Object 및 char[] 메소드만 있는 경우 배열 버전이 선택됩니다.
그러나 Integer 버전도 사용할 수 있는 경우 해당 버전과 배열 버전 모두 Object 버전보다 더 구체적이 됩니다. . 이 경우 Java는 null 처리에 어떤 방법이 더 적합한지 결정할 수 없습니다.
이 모호성을 해결하려면 인수를 원하는 유형으로 명시적으로 캐스팅할 수 있습니다. 예를 들면 다음과 같습니다.
doSomething((char[]) null);
이 경우 Java는 명확하게 char[] 버전을 선택합니다.
실제로 이러한 모호성은 생각보다 덜 일반적입니다. 일반적으로 메소드는 null 또는 Object와 같은 매우 일반적인 유형에 의존하는 대신 특정 유형을 갖는 인수를 사용하여 호출됩니다. 그러나 메서드 오버로딩 및 null 값을 사용할 때 이러한 잠재적인 모호성을 이해하는 것이 중요합니다.
위 내용은 Java는 Null 인수로 인한 모호한 메서드 오버로드를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!