Java 使用变量args重载

Java 使用变量args重载,java,overloading,Java,Overloading,这段代码无法编译,编译器说f是不明确的。但是我认为第二种方法可以匹配f('b','c')问题出在哪里?这是因为无法确定该方法调用是否应该调用具有变量args的方法或具有float和变量args的方法 Java决定使用方法以这种方式调用加宽>装箱>变量args,但是在这种情况下,两者都有变量args 基本上,在这种情况下,char被扩展为float java原语的扩展顺序为: class OverloadingVarargs2 { static void f(float i, Charac

这段代码无法编译,编译器说f是不明确的。但是我认为第二种方法可以匹配
f('b','c')问题出在哪里?

这是因为无法确定该方法调用是否应该调用具有变量args的方法或具有float和变量args的方法

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

基本上,在这种情况下,char被扩展为float

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
    }
}

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

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

基本上,在这种情况下,char被扩展为float

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
    }
}