>Java >java지도 시간 >Java는 Null 인수로 인한 모호한 메서드 오버로드를 어떻게 처리합니까?

Java는 Null 인수로 인한 모호한 메서드 오버로드를 어떻게 처리합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-05 08:23:39731검색

How Does Java Handle Ambiguous Method Overloading with Null Arguments?

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

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