问题描述
|
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
}
}
该代码无法编译,编译器说f含糊。但是我认为第二种方法可以匹配ѭ1。这是什么问题?
解决方法
这是因为无法确定该方法调用是应调用变量args还是应调用float和变量args。
Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。
在这种情况下,基本上将char扩展为浮动。
Java基元的扩展顺序为:
byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double