章节: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.