문제

~ 안에 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)

모호함이 없습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top