이 메소드 서명에서 줄임표 (…)는 무엇입니까?


203

에서 앱 엔진 문서 , 줄임표 (무엇 JID...이 방법 서명에 대한)은?

public MessageBuilder withRecipientJids(JID... recipientJids)

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


7
그건 그렇고, HORIZONTAL ELLIPSIS 문자 인 Unicode U + 2026을 사용해 보았습니다 . Java 8의 NetBeans 8은 "잘못된 문자"를보고합니다. 따라서 Java varargs에는 3 배 FULL STOP (마침표)이 필요합니다 ....
Basil Bourque

답변:


208

그것들은 Java varargs입니다. 특정 유형의 객체 (이 경우 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


16
인수는 JID 배열로 전달 될 수도 있습니다 (이렇게하면 varargs가 이전 버전과 호환됩니다).
mjn

54
또한 0 개의 varargs (아무것도)를 전달하는 것이 합법적입니다.
Hawkeye Parker

9
마지막으로 vararg는 메소드의 마지막 매개 변수 여야합니다. 따라서 동일한 방법으로 두 개의 vararg 매개 변수를 가질 수 없습니다. 아마,이 방법이 흥미 롭다 docs.oracle.com/javase/7/docs/api/java/util/…
BlackBrain

62

메서드 내 에서 줄임표 또는 varargs 를 사용하는 방법은 마치 마치 배열 인 것입니다.

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

이 메소드는 다음과 같이 호출 할 수 있습니다.

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

내부 PrintWithEllipsis에서 유형 setOfStrings은 문자열 배열입니다. 따라서 컴파일러에 약간의 작업을 저장하고 배열을 전달할 수 있습니다.

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

들면 가변 인자 방법, 시퀀스 파라미터는 동일한 유형의 배열 인 것으로 취급된다. 따라서이 예제에서와 같이 두 시그니처가 시퀀스 하나만 선언하고 다른 하나는 배열을 선언한다는 점만 다릅니다.

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

컴파일 타임 오류가 발생합니다.

출처 : 기술 용어가 공통 용어 가 아닌 Java 프로그래밍 언어 사양 .variable arity parametervarargs


22

세 점 (...) 표기법은 실제로 수학에서 빌려온 것으로 "... 등"을 의미합니다.

Java에서 사용하는 경우을 의미합니다 varargs. 즉, 메소드 호출에 여러 개의 인수를 추가 할 수 있습니다. 유일한 제한은 varargs메소드 서명의 끝에 있어야하며 메소드 당 하나만있을 수 있다는 것입니다.


5

그것들은 varargs많은 수의 인수를받는 메소드를 만드는 데 사용됩니다.

예를 들어 PrintStream.printf 메소드는 사용할 인수가 몇 개인 지 모르기 때문에이 메소드를 사용합니다.

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

varargsJava 1.5 에 추가되었습니다


3

이는 메소드 가 유형 의 가변 개수의 인수 ( "varargs")를 허용 함을 의미합니다 JID. 방법 내에서 recipientJids제시됩니다.

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

또한 sprintfC 와 같은 관용구를 가능하게합니다 . String.format()예를 들어 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.