开发者

Overloading with variable args

开发者 https://www.devze.com 2023-03-15 19:59 出处:网络
class OverloadingVarargs2 { static void f(float i, Character... args) { System.out.println(\"first\"); 开发者_StackOverflow社区System.out.println(i);
class OverloadingVarargs2 {
    static void f(float i, Character... args) {
        System.out.println("first");
  开发者_StackOverflow社区      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
    }
}

This code can't be compiled, The compiler says that f is ambiguous. But I think the second method can match f('b', 'c'); what's the problem?


That is because there is no way to determine if that method call should either call the one with variable args or the one with float and variable args.

Java decides with method to call in this way widening > boxing > variable args, however in this case both have variable args.

Basically char is being widened to float in this scenario.

The widening order for java primitives is:

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

精彩评论

暂无评论...
验证码 换一张
取 消