2010-01-08 7 views
1
/** 
* Testing Arrays 
* @author N002213F 
* @version 1.0 
*/ 
public class JavaArrays { 

    public void processNames(String[] arg) { 
     //-- patented method, stop, do not read ;) 
    } 

    public void test() { 

     // works fine 
     String[] names1 = new String[] { "Jane", "John" }; 
     processNames(names1); 

     // works fine, nothing here 
     String[] names2 = { "Jane", "John" }; 
     processNames(names2); 

     // works again, please procced 
     processNames(new String[] { "Jane", "John" }); 

     // fails, why, are there any reasons? 
     processNames({ "Jane", "John" }); 

     // fails, but i thought Java 5 [vargs][1] handles this 
     processNames("Jane", "John"); 
    } 
} 

답변

9
processNames({ "Jane", "John" }); 

이 왜, 어떤 이유가있다, 실패?

유형을 지정하지 않았습니다. 자바는 여기에 형식 유추를하지 않습니다. 이 배열이 문자열 배열임을 지정합니다. this question에 대한 답변이 너무 실패

processNames("Jane", "John"); 

도이를 위해 도움이 될 수 있습니다,하지만 난 5 개 가변 인자를 처리하는 자바 생각은 가변 인자를 원하는 경우, 다음과 같은 당신의 방법을 작성해야

이 :

public void processNames(String... arg) 

주 대신 [].... 배열을 받아들이는 것은 그 메소드에 varargs를 사용할 수있는 권한이 없습니다.

1

마지막 줄에 : processNames(String ...args);은 varargs가 작동하도록 다음과 같이 작성되어야합니다.

0

세 번째 호출은 두 번째 호출과 같이 배열을 만들 수 없기 때문에 올바르지 않습니다. 최종 호출이 성공하려면 processNames를 varargs (see here)

의 수신자로 선언해야합니다.