章节: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.
Java方法重载与可变参数详解
本文探讨了Java中方法重载与可变参数的使用限制,特别是在多个重载方法都接受可变参数时可能遇到的问题。通过具体示例,展示了如何正确设计方法签名以避免编译错误。
171万+

被折叠的 条评论
为什么被折叠?



