class OverloadingVarargs2 {
static void f(float i, Character... args) {
System.out.println("first");
System.out.println(i);
}
static void f(Character... args) {
System.out.println("second");
}
static void test() {
f(1, 'a');
f('b', 'c'); // the method f is ambiguous
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码无法编译,编译器说f是不明确的.但我认为第二种方法可以匹配f('b', 'c');问题是什么?
这是因为无法确定该方法调用是应该调用带有变量args的方法还是带有float和variable args的方法调用.
Java决定用这种方式调用扩展> boxing>变量args,但是在这种情况下两者都有变量args.
在这种情况下,基本上char被扩展为浮动.
java原语的扩展顺序是:
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |