Just when I thought I understood JLS15.12 as it applied to varargs, here\'s this example:
package com.example.test.reflect;
public class MethodResolutionTes
In section 8.4.1:
If the last formal parameter is a variable arity parameter of type
T
, it is considered to define a formal parameter of typeT[]
.
Since you're explicitly providing an array, this allows the second two calls to match the variable arity method in the first phase, without consideration of variable arity.
Vararg methods can be called with multiple parameters (a, b, c) or as an array ({a, b, c}). Because you are passing an array that matches the type of the varargs it takes precedence.
Reference: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.1