2010-03-02 1 views
169

App Engine docs에서이 메서드 서명에 대한 줄임표 (JID...)는 무엇입니까?이 메소드 서명에 대한 줄임표 (...)는 무엇입니까?

public MessageBuilder withRecipientJids(JID... recipientJids) 

이 세 점의 기능은 무엇입니까?

+5

그건 그렇고, 나는 HORIZONTAL ELLIPSIS 문자 '...', 유니 코드 U + 2026을 시도했다. Java 8의 NetBeans 8은 "불법 문자"를보고합니다. 따라서 Java 가변 인수에는 트리플 완전 정지 (마침표), '...'가 필요합니다. –

답변

178

이들은 Java 가변 인수입니다. 그들은 특정 유형의 객체를 여러 개 전달할 수 있습니다 (이 경우 JID 유형 임). 당신의 예에서

, 다음 함수 호출이 유효합니다 :

MessageBuilder msgBuilder; //There should probably be a call to a constructor here ;) 
MessageBuilder msgBuilder2; 
msgBuilder.withRecipientJids(jid1, jid2); 
msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid); 

여기에 대한 자세한 내용보기 : http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

+13

인수는 JID의 배열로 전달 될 수도 있습니다 (이것은 varargs의 역방향 호환을 가능하게합니다). – mjn

+43

또한 0 개의 varargs (nothing)을 전달하는 것은 합법적입니다. –

+6

마지막으로, vararg는 메소드의 마지막 매개 변수 여야합니다. 따라서 동일한 메소드에서 두 개의 vararg 매개 변수를 가질 수 없습니다. 어쩌면이 방법이 흥미 롭다는 것을 알 수 있습니다. http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList%28T...%29 – BlackBrain

3

그것은 방법은 유형 JIDvariable number of arguments ("변수 인수")를 받아들이는 것을 의미한다. 방법 내에서 recipientJids이 표시됩니다.

자연스럽게 두 개 이상의 인수를 선택적으로 처리 할 수있는 방법을 사용하는 경우에 유용하며 하나 또는 두 개의 매개 변수를 동일한 메소드에 전달할 수있는 호출을 작성할 수 있습니다. 즉석에서 배열을 만드는 추함.

또한 sprintf과 같은 숙어를 C에서 사용할 수 있습니다. 예를 들어 String.format()을 참조하십시오.

5

이들은 varargs이며 모든 인수를받는 방법을 만드는 데 사용됩니다.

예를 들어, PrintStream.printf 메서드는 사용하는 인수의 개수를 모르기 때문에이를 사용합니다.

인수의 최종 위치로만 사용할 수 있습니다.

varargsJava 1.5

18

점 3 (...)가 실제로 수학 표기법에서 차용에 첨가하고, 그것을 "등등 .. 그리고"를 의미 하였다.

Java에서의 사용은 varargs의 약자이며, 메서드 호출에 원하는 수의 인수를 추가 할 수 있습니다. 유일한 제한은 varargs이 메소드 서명의 끝에 있어야하며 메소드 당 하나만있을 수 있다는 것입니다.

obj.PrintWithEllipsis(); // prints nothing 
obj.PrintWithEllipsis("first"); // prints "first" 
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond" 

내부를 :

public void PrintWithEllipsis(String...setOfStrings) { 
    for (String s : setOfStrings) 
     System.out.println(s); 
} 

이 메소드는 다음과 같이 호출 할 수 있습니다 : 그것은 배열처럼

51

또는 메소드 내부을 변수 인수 줄임표를 사용하는 방법은 PrintWithEllipsis 인 경우 setOfStrings 유형은 String의 배열입니다. 그래서 당신은 컴파일러에게 약간의 작업을 저장하고 배열을 전달할 수 : 를 들어

String[] argsVar = {"first", "second"}; 
obj.PrintWithEllipsis(argsVar); 

은 일련의 매개 변수가 동일한 유형의 배열 것으로 처리됩니다 방법을 가변 인자.

void process(String[] s){} 
void process(String...s){} 

다음 컴파일시 오류가 발생하는 두 개의 서명이 하나의 예에서와 같이, 일련의 다른 배열을 선언 만 다를 경우에 따라서.

출처 : The Java Programming Language 사양 여기서 기술 용어는 varargs이 아닌 variable arity parameter입니다.

+8

+1 대 배열 생략 메소드 서명 비트. – aspen100

2

메소드에서 가변 인수 (varargs)를 허용 할 수있는 매개 변수를 정의 할 수 있습니다. 가변 인수를 받아들이는 방법 daysOffWork 정의 클래스 직원의 예를 다음

class Employee { 
    public int daysOffWork(int... days) { 
     int daysOff = 0; 
     for (int i = 0; i < days.length; i++) { 
      daysOff += days[i]; 
     } 
     return daysOff; 
    } 
} 
데이터 유형을 다음 줄임표 (...)은 가 전달 될 수있어서 파라미터 것을 나타낸다

배열 또는 여러 개의 쉼표로 구분 된 값.