java - Var-args 重载

标签 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);
    }
}

最佳答案

Java 中的这些概念应该有所帮助, 允许装箱+加宽,但不允许加宽+装箱

这些加宽、拳击和 Vararg 规则应该有所帮助:

  1. Primitive Widening > Boxing > Varargs.
  2. Widening and Boxing (WB) not allowed.
  3. Boxing and Widening (BW) allowed.
  4. While overloading, Widening + vararg and Boxing + vararg can only be used in a mutually exclusive manner
  5. Widening between wrapper classes not allowed.
  6. Widening+varArgs & Boxing+varargs are individually allowed (but not allowed in overloaded version of method).
  7. Boxing+Widening is preferred over Boxing+Varargs.

希望这有帮助。

关于java - Var-args 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18314454/

相关文章:

c++ - varargs(va_list va_start) 不适用于传递引用参数

typescript - 如何在 Typescript 中使用可变元组类型?

java - 提交表单时 Spring 枚举异常

java - 处理 zip 中约 450.000 个文件

java - 如何在 Swing 中堆叠标签?

java - java中方法规则重载解释

组合字节数组以接受可变数量的参数

java - 领域对象的集合 - 组合与继承

c++ - "Overload"基于函数对象operator()签名的函数模板

java - Java中的接口(interface)方法重载