As you can see, I've only declared 1 method called
/** Testing variable arguments passing. */
public class Varargs {
public static void main(String args[]) {
myMethod("Hello");
System.out.println();
myMethod("Hello", "again", "world!");
}
public static void myMethod(Object ... args) {
System.out.println("You have passed in " + args.length + " arguments ");
for (Object o : args) {
System.out.println(o);
}
}
}
'myMethod'
, and have passed an arbitary number of arguments to it, which would have in the past generated a compiler error telling me that the method signatures I've used are not present. But in this case (with Java 1.5 and above), it compiles and produces the following output:The "..." operator does require you must have at least 1 or more arguments, but while you can pass a
You have passed in 1 arguments
Hello
You have passed in 3 arguments
Hello
again
world!
null
to it, the compiler will generate some output to warn you to be explicit in your variable typing.Internally, the number of arguments is actually statically determined by
'javac'
compiler, and converted to an object array for processing, so there are limitations in the sense that it is not truly dynamic, but just a compilation convenience method that can save you from writing multiple method signatures for different permutations of the same method call.If you like reading this, you may also enjoy:
2 comments:
I think the best use of these varargs that are not part of the JDK e.g. MessageFormat.format(...). Would be in "plumbing" code that you may write that involves passing method paramters across layers as in my EJB Service Locator Pattern.
Another useful place for this would be in System.out.println("abc", "def", someOtherVariable, 1).
But I think they should be avoided when the parameter should have been a List in the first place.
Fantastic article Vincent,vararg is very interesting feature but still under utilized. you know even main method is written using varargs. by the way I also blogged my experience as variable arguments in java let me know how do you find it
Post a Comment