章節:Initialization & Cleanup > Array initialization > Variable argument lists
以下程序會報錯:
public class OverloadingVarargs2 {
static void f(float i, Character... args) {
System.out.println("first");
}
static void f(Character... args) {
System.out.print("second");
}
public static void main(String[] args) {
f(1, ‘a’);
f(‘a’, ‘b’);
}
}
f('a', 'b')無法匹配。原因不得而知(char類型可以轉換爲float,也可以auto-boxing爲Character,但無法在二者間做出選擇?)
改爲一下則可以通過編譯:
public class OverloadingVarargs3 {
static void f(float i, Character... args) {
System.out.println("first");
}
static void f(char c, Character... args) {
System.out.println("second");
}
public static void main(String[] args) {
f(1, 'a');
f('a', 'b');
}
}
因此,作者給出瞭如下建議:
You should generally only use a variable
argument list on one version of an overloaded method. Or consider not doing it at all.