>Java >java지도 시간 >Java는 Null 인수를 전달할 때 오버로드된 메서드의 모호성을 어떻게 해결합니까?

Java는 Null 인수를 전달할 때 오버로드된 메서드의 모호성을 어떻게 해결합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 18:53:09938검색

How Does Java Resolve Ambiguity in Overloaded Methods When Passing 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)을 호출하면 컴파일러는 모호한 방법으로 인한 오류. 세 가지 매개변수 유형(Object, char[], Integer) 중 하나에 null이 할당될 수 있기 때문입니다.

모호성 판별

모호성을 이해하려면, 메소드 오버로딩에서 특이성 개념을 고려해야 합니다. Java는 가장 구체적으로 적용 가능한 메소드를 호출하는 것을 선호합니다. 이 경우 세 가지 메소드 모두 잠재적으로 null을 허용할 수 있습니다.

그러나 char[] 및 Integer는 할당할 수 있는 값의 범위가 더 좁기 때문에 Object보다 더 구체적입니다. 따라서 doSomething(Object) 및 doSomething(char[])만 존재한다면 Java는 후자를 선택하게 됩니다.

모호성 해결

둘 다 doSomething(char []) 및 doSomething(Integer)을 사용할 수 있으며 둘 중 어느 것도 다른 것보다 더 구체적이지 않습니다. 이로 인해 모호성이 생기고 컴파일러가 실패하게 됩니다.

이 문제를 해결하려면 null 인수를 원하는 유형으로 캐스팅하여 호출하려는 메서드를 명시적으로 명시해야 합니다. 예를 들면 다음과 같습니다.

doSomething((char[]) null);

실용적 고려 사항

실제로 null 인수를 사용한 메서드 오버로드는 생각보다 덜 일반적입니다. 일반적으로 메소드에서 요구하지 않는 한 명시적으로 null을 전달하지 않으며, null을 전달하는 경우 일반적으로 특정 유형을 염두에 두고 있습니다.

이러한 고려 사항을 염두에 두면 오버로드된 메소드가 null 인수를 처리할 때 모호하지 않게 유지하고 컴파일러 오류를 방지하세요.

위 내용은 Java는 Null 인수를 전달할 때 오버로드된 메서드의 모호성을 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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