Hi Giles,
Welcome to JavaRanch!
The code doesn't compile because the two method signatures are the same -- they're two different ways of making the identical declaration. A final argument using the varargs notation is actually compiled into an array argument. One interesting consequence of this is that you can call a method declared using array argument syntax by using the varargs syntax -- for example
List<
String> list = Arrays.asList("one", "two", "three");
works just fine.