可变args过载

问题描述

|
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
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...