使用变量args重载

时间:2011-06-25 05:22:25

标签: java overloading

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是不明确的。但我认为第二种方法可以匹配f('b', 'c');问题是什么?

1 个答案:

答案 0 :(得分:8)

这是因为无法确定该方法调用是应该调用带有变量args的方法还是带有float和variable args的方法调用。

Java决定用这种方式调用扩展>拳击>变量args,但是在这种情况下两者都有变量args。

在这种情况下,基本上char被扩展为浮动。

java原语的扩展顺序是:

byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double