Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Var args重载_Java_Overloading_Variadic Functions - Fatal编程技术网

Java Var args重载

Java Var args重载,java,overloading,variadic-functions,Java,Overloading,Variadic Functions,有人能解释一下为什么这段代码会抛出一个不明确的重载错误吗?当然整数方法更具体、更适用吗 谢谢 内德 Java中的这些概念应该会有所帮助, 允许装箱+加宽,但不允许加宽+装箱 这些加宽、装箱和变位规则应有助于: 基本体加宽>装箱>变量 不允许加宽和装箱(WB) 允许装箱和加宽(BW) 重载时,只能使用加宽+vararg和装箱+vararg 以相互排斥的方式使用 不允许在包装类之间加宽 单独允许加宽+varArgs和装箱+varArgs(但在方法的重载版本中不允许) 装箱+加宽优先于装箱+变宽 希望

有人能解释一下为什么这段代码会抛出一个不明确的重载错误吗?当然整数方法更具体、更适用吗

谢谢

内德


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

这些加宽、装箱和变位规则应有助于:

  • 基本体加宽>装箱>变量
  • 不允许加宽和装箱(WB)
  • 允许装箱和加宽(BW)
  • 重载时,只能使用加宽+vararg和装箱+vararg 以相互排斥的方式使用
  • 不允许在包装类之间加宽
  • 单独允许加宽+varArgs和装箱+varArgs(但在方法的重载版本中不允许)
  • 装箱+加宽优先于装箱+变宽

  • 希望这能有所帮助。

    查看
    Integer
    int
    不同
    Integer
    是一个包装器。这是一篇很好的文章-如果在重载方法中将
    long…
    更改为
    long
    ,它将被编译。我相信varargs会在编译时转换为数组,所以我认为这就是产生歧义的地方。我认为int将被简单地装箱并应用于整数var args,而长var args将被忽略,因为不能同时加宽和装箱。编译器告诉我有一个类型为AmbiguousSure,NP的不明确错误。很高兴这有帮助。你可以通过接受答案来结束问题。谢谢
    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);
        }
    }