Categories
ellipsis java

What is the ellipsis (…) for in this method signature?

227

In the App Engine docs, what is the ellipsis (JID...) for in this method signature?

public MessageBuilder withRecipientJids(JID... recipientJids)

What’s the function of those three dots?

1

  • 7

    By the way, I tried the HORIZONTAL ELLIPSIS character, , Unicode U+2026. NetBeans 8 in Java 8 reports “illegal character”. So Java varargs require the triple FULL STOP (period), ....

    Jan 25, 2015 at 1:54


226

Those are Java varargs. They let you pass any number of objects of a specific type (in this case they are of type JID).

In your example, the following function calls would be valid:

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);

See more here:
http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

3

  • 19

    Note that the arguments may also be passed as an array of JID (this makes varargs backward compatible).

    – mjn

    Mar 13, 2010 at 19:39


  • 58

    Also note that passing 0 varargs (nothing) is legal.

    Jun 28, 2012 at 0:00

  • 10

    Last but not least, the vararg must be the last parameter of the method. So, you cannot have two vararg parameters in the same method. Maybe, you can find this method interesting docs.oracle.com/javase/7/docs/api/java/util/…

    – user4118249

    Aug 17, 2015 at 19:14

76

The way to use the ellipsis or varargs inside the method is as if it were an array:

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

This method can be called as following:

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

Inside PrintWithEllipsis, the type of setOfStrings is an array of String.
So you could save the compiler some work and pass an array:

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

For varargs methods, a sequence parameter is treated as being an array of the same type. So if two signatures differ only in that one declares a sequence and the other an array, as in this example:

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

then a compile-time error occurs.

Source: The Java Programming Language specification, where the technical term is variable arity parameter rather than the common term varargs.

0

    27

    The three dot (…) notation is actually borrowed from mathematics, and it means “…and so on”.

    As for its use in Java, it stands for varargs, meaning that any number of arguments can be added to the method call. The only limitations are that the varargs must be at the end of the method signature and there can only be one per method.