고정/가변 소수점(varargs)이 모두 일치하는 가장 구체적인 방법
-
19-09-2019 - |
문제
~ 안에 Java 언어 사양의 섹션 15.12.2.5, 고정 소수점수를 사용하는 방법과 가변 소수점수를 사용하는 방법(예: varargs
).
JLS에서 찾을 수 없는 것은 두 가지 방법 중 하나를 결정하는 것과 관련된 것입니다. 하나는 고정 소수점이고 다른 하나는 가변 소수점입니다. 하지만.예를 들어:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
예상한 대로 잘 컴파일됩니다(아래 Yoni가 설명한 이유로).이 호출 코드는 다음도 컴파일합니다.
SomeApi api = ...
Object o = api.getSomething("Hello");
그리고 실행하면 method #1
(즉.varargs가 아닌 메서드)가 호출됩니다.이 호출 코드가 모호하지 않은 이유는 무엇입니까?왜 고정 계수 방법이 가변 계수 방법보다 더 구체적인가요?누군가 나에게 사양의 관련 부분을 알려줄 수 있습니까?
해결책
첫 번째 방법 해결 단계에서는 고정 소수점 방법만 고려하며 일치 항목이 발견되면 varargs 방법을 고려하기 전에 프로세스가 종료됩니다.
에서 http://docs.oracle.com/javase/specs/jls/se6/html/expressions.html#15.12.2.2
15.12.2.2 1단계:식별하다 매칭 아리티 하위 유형에 의해 적용 가능한 방법
서브 타이핑에 적용 할 수없는 방법이 없으면 해당 방법에 대한 검색은 2 단계 (§15.12.2.3)로 계속됩니다. 그렇지 않으면, 가장 구체적인 방법 (§15.12.2.5)은 하위 유형에 의해 적용 가능한 방법 중에서 선택됩니다.
(내 강조점.)
다른 팁
사양을 지적 할 수는 없지만 논리적으로
getSomething(String...args)
번역합니다
getSomething(String[] args)
모호함이 없습니다