小编典典

使用可变参数重载

java

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');解决什么问题?


阅读 238

收藏
2020-11-23

共1个答案

小编典典

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

Java决定以这种方式来调用拓宽>装箱>变量args的方法,但是在这种情况下,两者都具有变量args。

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

Java基元的扩展顺序为:

byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double
2020-11-23