다음 프로그램이 예외를 throw하는 이유는 무엇입니까? 방법 callMethod은 (정수 [])이SCJP 질문 : var-args로 자바 메소드 오버로딩. 이유는 무엇입니까?
OK 타입 MainClass 대한 모호 I합니다 (만약 두 가지 방법 중 하나가 작동하는지 알 수
public class MainClass{
public static void main(String[] argv){
callMethod(2);
}
public static void callMethod(Integer... i){
System.out.println("Wrapper");
}
public static void callMethod(int... i){
System.out.println("Primitive");
}
} 다른 것은 주석 처리되어 있습니다), 또한 프리미티브가 메소드의 입력 유형과 정확히 일치하지 않으면 어떻게 될지에 대한 계층 구조가 있다는 것을 알고 있습니다.
가장 먼저 시도되는 것은 프리미티브를 넓히는 것입니다.
이 public static void callMethod(long i){
System.out.println("long");
}
코드는 긴
두 번째 것은 원시 박스입니다 인쇄 할 것이다 : 그래서, 경우 세 번째 방법이 있었다. 그래서 Integer를 취하는 메소드가 있다면 그것은 호출 된 메소드가 될 것입니다.
세 번째 우선 순위는 var-args입니다.
위의 우선 순위에 따라 두 번째 우선 순위가 예상됩니다. int가 Integer로 랩핑되고 (Integer ...) 호출 될 것이라고 예상합니다. 그러나 물론 이것은 일어나지 않습니다. 대신 예외가 발생합니다.
누구든지이 예제에서 우선 순위가 적용되지 않는 이유를보고 설명 할 수 있습니까?
건배!
나는 3 가지 접근 방식을 시도하고 "호출 가능"한 첫 번째 호출이 시도 될 것이라고 생각했습니다. 이 메서드는 (Integer ... i) 걸리지 만 Integrity로 복싱하면 해당 메서드가 "호출 가능"하게됩니다. 그러나, 당신이 말했듯이, 이후의 "var-arg-ization"또한 고려 된 것 같습니다. 건배! –