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

前端 未结 5 2146
青春惊慌失措
青春惊慌失措 2020-11-22 06:23

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

public MessageBuilder withRecipientJids(JID... recipientJids         


        
相关标签:
5条回答
  • 2020-11-22 06:42

    Those are varargs they are used to create a method that receive any number of arguments.

    For instance PrintStream.printf method uses it, since you don't know how many would arguments you'll use.

    They can only be used as final position of the arguments.

    varargs was was added on Java 1.5

    0 讨论(0)
  • 2020-11-22 06:46

    It means that the method accepts a variable number of arguments ("varargs") of type JID. Within the method, recipientJids is presented.

    This is handy for cases where you've a method that can optionally handle more than one argument in a natural way, and allows you to write calls which can pass one, two or three parameters to the same method, without having the ugliness of creating an array on the fly.

    It also enables idioms such as sprintf from C; see String.format(), for example.

    0 讨论(0)
  • 2020-11-22 06:59

    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

    0 讨论(0)
  • 2020-11-22 06:59

    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 讨论(0)
  • 2020-11-22 07:01

    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.

    0 讨论(0)
提交回复
热议问题