Java Varargs Best Practice


Varargs

  • accept zero or more arguments
  • an anonymous array is created every time

Don’t use Varargs unless really needed

  • in most cases, we can just use a collection/list then wrap the hard-coded values with Arrays.asList

Require one

  • static int min(int firstArg, int... remainingArgs)

Good Cases to Use Varargs

  • Reflection uses lot of variable argument method.
    • public Method java.lang.Class.getMethod(String name, Class<?>... parameterTypes)

Performance-critical Methods

  • an anonymous array is created every time
  • ImmutableList.of(), of(e1), of(e1, e2), of(e1,e2,,,, e11), 0f(e1,,,e1, E... others)

Careful when Overloading with Varargs

The correct way is to:

Careful when Overloading with Varargs and Autoboxing

Java Generic and Array doesn’t mix well

Item 32: Combine generics and varargs judiciously

  • A generic varargs parameter is useful in some cases.
    • Arrays.asList(T... a), Collections.addAll(Collection<? super T> c, T... elements), EnumSet.of(E first, E... rest).
  • but it also may be dangerous: throw ClassCastException at runtime etc

Varargs gotchas: passing an array, a collection into varargs

  • Passing an iterable to the varargs method containsExactly(Object…) is often not the correct thing to do.

@SafeVarargs

  • a promise by the author of a method that it is typesafe, thus the compiler doesn’t warn.

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)