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

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

public MessageBuilder withRecipientJids(JID... recipientJids)

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



답변

그것들은 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


답변

메서드 내 에서 줄임표 또는 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


답변

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

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


답변

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

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

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

varargsJava 1.5 에 추가되었습니다


답변

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

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

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


답변