【问题标题】:Object vararg and int vararg compilation error [duplicate]Object vararg 和 int vararg 编译错误 [重复]
【发布时间】:2016-09-28 20:02:37
【问题描述】:

为什么下面的代码给出编译错误“The method show(Object[]) is ambiguous for the type VarArgs”?。

行显示错误(10,20,30);

public class VarArgs {
    public static void main(String[] args) {
        show(10,20,30);
    }

    private static void show(Object... args){
        System.out.println("Object");
    }

    private static void show(int... arry){
        System.out.println("Integer");
    }
}

JDK:jdk1.6.0_23

【问题讨论】:

  • 谢谢图纳基。不确定它是否重复,因为重载是 int vararg 和 Integer vaarg。制作 show(10,20,30) 时,为什么会出现混乱?另一方面 private static void show(Integer... arry) 有效..

标签: java variadic-functions


【解决方案1】:

您应该首先阅读this,然后在 show 方法中传递一个 int 数组而不是 3 个 int。

这里发生的事情是 Java 编译器自动将 int 装箱到 Integer 类,并且由于 Integer 类是 Object 类的子类,所以 show() 方法的两个版本都可以接受 show(int[]) ,因此编译器会抛出模棱两可的错误。

【讨论】:

  • show(int[]) 无法进行 show(10,20,30)。此外,如果我将第二种方法更改为 private static void show(Integer... arry),它可以工作。
  • 我想你误会了,show(int[]) 我的意思是用 int 数组作为参数调用 show 方法。
  • 对于可变参数,show(10,20,30) 是一个传递的数组,对吧?我认为,第二种方法被装箱为整数,然后扩大到对象。不过不确定。
猜你喜欢
  • 2020-10-29
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 2022-11-20
相关资源
最近更新 更多