I am taking a Data Structures and Algorithms course for fun at a local community college. The course\'s textbook is Y. Daniel Liang\'s Introduction to Java Programming,
In Java, varargs are a syntactical sugar for creating an array when calling a method. For example, these two calls are equivalent:
void foo(String... args) { ... }
foo("hello", null, "world", xyz); // Java 1.5+
foo(new String[]{"hello", null, "world", xyz}); // All versions of Java
Varargs doesn't make anything new possible (by definition of syntactic sugar), but it reduces verboseness and makes some constructs much more agreeable to implement. For example, some of my favorite uses of vararg include: PrintStream.printf(), String.format(), Method.invoke().
Other good applications of varargs:
// This one is in the Java standard library
Collections: void addAll(Collection super T> c, T... elements);
// Custom examples
int max(int... nums);
void doOperation(File x, String y, SomeEnum options...);
Additionally, Java's varargs bring the language up to parity with the vararg support in C, Python, JavaScript, and other languages. So if a frequently recurring design (such as max()
) works best with varargs, Java is no longer the odd language that requires an uglier implementation.