Java Isn';接受vararg对象的t函数。。。使用对象[]参数调用时参数是否有歧义?

Java Isn';接受vararg对象的t函数。。。使用对象[]参数调用时参数是否有歧义?,java,variadic-functions,Java,Variadic Functions,因此,基本上从我在StackOverflow上的搜索中,这个弹出(如果错误,请纠正我): 您可以通过以下方式定义接受变量参数(在本例中为任何对象)计数的函数: public void varadric(Object... arguments) { //I'm a dummy function } 使用任意数量的参数(扩展对象)调用此方法,将在函数中得到一个参数Object[]: public static main() { varadric("STRING", new A

因此,基本上从我在StackOverflow上的搜索中,这个弹出(如果错误,请纠正我):

  • 您可以通过以下方式定义接受变量参数(在本例中为任何对象)计数的函数:

    public void varadric(Object... arguments) {
        //I'm a dummy function
    }
    
  • 使用任意数量的参数(扩展对象)调用此方法,将在函数中得到一个参数
    Object[]

     public static main() {
         varadric("STRING", new ArrayList<int>());
     }
     public void varadric(Object... arguments) {
         System.out.println("I've received "+arguments.length+" arguments of any Object subclass type.");
     }
    

    有人能告诉我这一点吗?

    嗯,有几个选择:

    • 自己创建一个数组:

      varadric(new Object[] { array })
      
    • 声明类型为
      Object
      的局部变量,并让编译器将其包装到数组中:

      Object tmp = array;
      varadric(tmp);
      
    • 以上内容的一个变体-刚才的演员阵容:

      varadric((Object) array);
      
    但是是的,您可以正确地说,当使用类型为
    Object[]
    的单个参数和声明为
    Object的varargs参数时。。。foo
    ,编译器不会将其包装,因为它是一个数组,因为它不需要包装。

    它将是一个二维数组。 此声明
    public void varadric(Object[]…arguments)
    将接收
    Object[]
    的数组(
    ) 例如:

    将打印:
    hi

    尝试调用
    varadric((对象)args)以查看不同的行为。在这种情况下,它将被视为单个参数,并封装在自己的
    对象[]
    中。也就是说,
    varadric
    方法中的变量
    arguments
    将是一个
    对象[]
    ,其中包含一个
    对象[]
    ,该对象包含一个
    字符串
    和一个
    数组列表
    Object tmp = array;
    varadric(tmp);
    
    varadric((Object) array);
    
    public class Test {
        public static void main(String[] args) {
            Object[] o = new Object[2]; 
            o[1] = "hi";
            t(o);
        }
    
        public static void t(Object[]... arg) {
            System.out.println(arg[0][1]);
        }
    }