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