2013-04-30 8 views
2

다음 코드는 자바에서 잘 컴파일 작업하는 동안 유사한 호출 메커니즘은 자바에 의해 관리되지 않는 이유방법 전화 주문

public static void main(String[] args) { 
    int i =5; 
    call(i); 
} 


static void call(int... i){ 
    System.out.println("int..."); 
} 

static void call(long... i){ 
    System.out.println("long..."); 
} 

static void call(Integer... i){ 
    System.out.println("Integer..."); 
} 


static void call(Object... i){ 
    System.out.println("Object..."); 
} 

을 var-args? 두 번째 예제에서도 호출은 메서드로 이동해야합니다. static void call(int... i)

+0

'정수'및 '객체'버전이 없으면 작동합니까? 그렇다면 오토 박싱 때문입니다. – NilsH

+1

가능한 복사 http://stackoverflow.com/questions/2521293/bug-with-varargs-and-overloading –

+0

올바른 @ c.P.u1. 그러나, 그것은 최신 jdk 7 버전으로 수정해야합니다, 그래서 나는 autoboxing 때문에이 특정 오류가 있다고 가정합니다. – NilsH

답변

0

메서드를 정적 void call (int ... i)로 선언하고 메서드에서 int 배열을 필요로하지만이 메서드를 호출하는 동안 보내는 경우에만 하나의 정수 값.

Static void call(int... i) is Same as Static void call(int[] i) 
-1

가변 인수는 java의 배열로 처리됩니다. 따라서 int 값을 전달하는 대신 배열처럼 전달하십시오. 예를 들면.

int[] i ={5}; 
call(i); 
+1

예, 배열로 처리되지만 배열로 호출 할 필요는 없습니다. – NilsH

+0

현재 시나리오에서이 방법을 호출 할 수 있다고 가정합니다. 그렇지 않으면 당신이 할 수 .. 전화 (5,6,7). 그래서 내 해결책은 문제에 관한 것이 었습니다. 그래서이 사람은 어떻게 부르는지 이해할 수 있습니다 ... 해결책의 의도를 이해하지 못하고 부정 투표를하는 것이 항상 적절하지는 않습니다. –

+1

예,하지만 질문에 대답하지 않습니다. , 그것은 왜 오류를주는 것입니까? – NilsH

1

여기 answer

자바 방법을 가변 인자 과부하 잘 일을 doesnot이다.

다음은 사양이 제공하는 것입니다.

언제 varargs를 사용해야합니까? 클라이언트는 API가 제공 할 때마다이를 활용해야합니다. 핵심 API에서 중요한 용도로는 반영, 메시지 형식 지정 및 새 printf 기능이 있습니다. API 설계자는 이점을 정말로 강하게 끄는 경우에만 가급적 사용해야합니다. 일반적으로 varargs 메서드를 오버로드하지 말아야합니다. 그렇지 않으면 프로그래머가 어떤 오버로드가 호출되는지 파악하기가 어려울 수 있습니다.

+0

vararg 메소드를 오버로드 할 수 있습니다. 그러나 경우에 따라 OP와 같이 최악의 경우가 발생할 수 있습니다. – NilsH

+1

그리고 실제로 일어나고있는 것에 대한 설명이 있습니다 : http://www.xyzws.com/Javafaq/why-overloading-a-varargs-method-doesnt-work-for-the-primitive-type-and-its-object- wrapper-type/50 – NilsH

+0

그 말은 * [Guide to Features,] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html), * Java가 아닙니다. 언어 사양. – EJP