Var-args重载

时间:2013-08-19 13:00:37

标签: java overloading variadic-functions

有没有人可以解释为什么这段代码会引发一个模糊的重载错误,当然Integer方法更具体和适用?

谢谢,

奈德

package object_orientation;
public class Ambiguous {
    //ambiguous error compiler unsure whether boxing is needed or not
    static void overload(Integer... d){
        System.out.println("Integer");
    }

    static void overload(long... d){
        System.out.println("Long");
    }

    public static void main(String a[]){
        int i = 1;
        overload(i);
    }
}

1 个答案:

答案 0 :(得分:3)

Java中的这些概念应该有所帮助, Boxing + Widening is allowed,但not Widening + Boxing

扩张,拳击和Vararg的这些规则应该有所帮助:

  
      
  1. 原始加宽>拳击>可变参数。
  2.   
  3. 不允许加宽和装箱(WB)。
  4.   
  5. 允许拳击和加宽(BW)。
  6.   
  7. 在超载时,加宽+​​ vararg和Boxing + vararg只能   以互斥的方式使用
  8.   
  9. 不允许在包装类之间扩展。
  10.   
  11. 加宽+ varArgs& Boxing + varargs是单独允许的(但在重载版本的方法中不允许)。
  12.   
  13. 拳击+加宽比Boxing + Varargs更受欢迎。
  14.   

希望这有帮助。