在java中重载var args方法和包装器方法时出现歧义错误

sar*_*sar 5 java overloading ambiguity

我试图编译以下代码但是出错了

static void test(long... x)
{ 
    System.out.println("long..."); 
}

static void test(Integer... x)
{
    System.out.println("Integer..."); 
}

public static void main(String [] args) {
    int no=5;
    test(no,no);//getting error at this  point  in eclipse 'The method test(long[]) is ambiguous '
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它含糊不清.意味着如果我传递一个int值它应该自动框并test(Integer..x)应该被调用..类似的行test(long..x )应该被调用..这是我的理解..有人可以解释为什么它是模棱两可的?

Ger*_*ton 2

int参数与您的任一定义都不匹配 - 一个定义为,long另一个定义为,Integer因此由编译器决定。投射到long与拳击到同等有效Integer

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2