方法规则重载java中的解释

时间:2014-03-23 16:27:36

标签: java overloading

我尝试了解使用java编译器的重载规则。

对我来说太难了。

public class Main {

    public static void var(Long x) {
        System.out.println("Long");
    }

    public static void var(int... x) {
        System.out.println("int... x");
    }


    public static void main(String... args) {
          var(5);
    }
}

输出:

int...

在互联网上,我找到了下一条规则:

  
      
  1. 原始加宽>拳击>可变参数。
  2.   
  3. 不允许加宽和装箱(WB)。
  4.   
  5. 允许拳击和加宽(BW)。
  6.   
  7. 在超载时,Widening + vararg和Boxing + vararg只能以互斥的方式使用,即不能一起使用。
  8.   
  9. 不允许在包装类之间扩展
  10.   

但我无法将此规则应用于此代码行为。

你能帮助我吗?

我的错误的版本:

拳击int - > Integer并扩展为Long

其他问题

public class Main {

    public static void var(Object x) {
        System.out.println("Object");
    }

    public static void var(int... x) {
        System.out.println("int... x");
    }


    public static void main(String... args) {
          var(5);
    }
}

输出:

object

1 个答案:

答案 0 :(得分:2)

  

int装箱Integer并扩大至Long

虽然intInteger拳击很好,但IntegerLong不是有效的扩展。 Long不是Integer的超类型。这样做无效。一个选项是加宽,然后是装箱。但是Java中不允许这种转换。所以剩下的唯一选择是使用varargs。