可变参数的概念和歧义?

2019年7月27日 6点热度 0条评论

这是一个例子:

package com.demo;
public class PassArray {
    static void vaTest(int... v){
        System.out.println("no of args : "+v.length+"contents: ");
        for (int x:v){
            System.out.println(x+" ");
        }
    }
    static void vaTest(boolean... v){
        System.out.println("no of args : "+v.length+"contents: ");
        for (boolean x:v){
            System.out.println(x+" ");

        }
    }
    public static void main(String args[]){

        vaTest(1,2,3);
        vaTest(true,false,true);
        vaTest();//Error:Ambiguous!
    }
}

谁能告诉我:

我有一些问题

1.为什么会出现歧义错误?

2.我有一个Varargs参数就像

int doIt(int a,int b,int c,int... vals)

为什么必须最后声明varargs?

  • 什么是varargs和歧义?
  • 解决方案如下:

    由于调用vaTest();有两种合法的方法调用,因此编译器无法确定要使用哪一种。
    为了解决这个问题,您可以提供所选类型的空数组:

    vaTest(new int[] {});
    

    可以在
    JLS 15.12.2.5. Choosing the Most Specific Method中获得更多信息。