Java에서 왜 전화 foo ()가 모호하지 않은 이유 2 개의 varags methods foo (int… ints) 및 foo (Object… Objects)가 주어지고 있습니까?

StackOverflow https://stackoverflow.com/questions/951388

문제

다음과 같이 2 개의 varargs 메소드 만 선언하면 다음과 같이 선언합니다.

public void foo(String... strings) {
    System.out.println("Foo with Strings");
}

그리고

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

그런 다음 코드를 가지고 있습니다.

foo();

이것은 예상대로 모호성으로 인한 컴파일러 오류입니다.

그러나 다음 2 가지 버전의 foo 만 있다면 :

public void foo(Object... objects) {
    System.out.println("Foo with Objects");
}

그리고

public void foo(int... ints) {
    System.out.println("Foo with ints");
}

그런 다음 코드

foo();

메소드의 ints 버전을 호출합니다. 두 번째 예제가 왜 모호하지 않은지와 객체 메소드를 통해 int 메소드로 해결되는 이유를 설명 할 수 있습니까? 감사.

도움이 되었습니까?

해결책

내가 SCJP를 준비 할 때부터 제대로 기억한다면, 첫 번째 경우에는 두 개의 인수가 그들 사이에 없어서 컴파일러가 하나를 선택할 수 없습니다.

두 번째로, 권투 활성화 (1.5+)를 사용하면 int는 객체의 하위 집합 인 정수가 될 수 있으며 충돌의 경우 컴파일러는 항상 가장 구체적인 정의를 사용합니다. 따라서 정수 (int)가 우선 순위가 지정됩니다.

다른 팁

Java는 항상 가능한 가장 가까운 유형을 사용하므로 ints를 메소드에 전달하면 int ... 메소드가 없으면 정수로 자극하고 객체를 사용합니다 .... int가 있기 때문에. .. 방법, Java는 먼저 사용합니다. 이것은 Java 컴파일러 설계에서 선택입니다.

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