4
두 가지 함수 호출이 있습니다. 하나는 문자열을 param으로 사용하고 다른 하나는 Object를 사용합니다. 나는이 수행 할 때 다음Java 함수 오버로드가 사용자 정의 클래스로 인해 모호합니다.
foo(Object a){...}
foo(String s){...}
과 전화 : 잘 작동
foo(null);
.
나는이 이렇게 그러나 경우 :
foo(CustomClass a){...}
foo(String s){...}
다음 전화 :
foo(null);
이클립스가 모호 하더군요. 따라서 두 가지 질문 :
- 왜 첫 번째 경우가 모호하지 않습니까?
- 어떻게 수정합니까?
컴파일러는 선택할 수 없습니다 만, 호출 널 (null)이 방법을 추론하기 위해 유형 원하는 유형으로 캐스트 할 수 있습니다되어야하는 방법을 알고있는 경우 -이 :
그래서, 아래의 호출은 잘 작동합니다 . – pabrantes
@pabrantes. 왜 캐스팅이 있을까요? 'null'은'String'과'CustomClass' 둘 다에 정확히 일치하지 않습니까? –
당신이 말한 것에 대해 옳았 습니다만 반환 유형이 메서드의 서명에 포함되어 있지 않기 때문에 원하는 반환 유형을 알고있는 경우 foo (String) 및 foo (CustomClass)가 다른 유형을 반환 할 수 있습니다. 명시 적 캐스트를 사용하면 문제가 해결됩니다. 이것은 (비록 대부분의 경우 나쁜 인터페이스 디자인이지만) 대소 문자 구별이지만 그 일은 – pabrantes