【问题标题】:Overloading with variable args使用变量 args 重载
【发布时间】:2013-06-01 08:36:13
【问题描述】:
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');有什么问题?

【问题讨论】:

    标签: java overloading


    【解决方案1】:

    这是因为无法确定该方法调用是应该调用具有变量 args 的方法还是调用具有浮点和变量 args 的方法。

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

    在这种情况下,基本上 char 被加宽以浮动。

    java原语的扩展顺序是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多