为什么以下程序抛出异常?
public class MainClass{
public static void main(String[] argv){
callMethod(2);
}
public static void callMethod(Integer... i){
System.out.println("Wrapper");
}
public static void callMethod(int... i){
System.out.println("Primitive");
}
方法callMethod(Integer[])对于MainClass类型来说是有歧义的
好的,我可以看到如果另一个方法被注释掉,两个方法都可以使用,但我也知道如果原始类型与方法输入的类型不完全匹配,会发生什么。
首先尝试的是扩大原始类型。因此,如果有第三种方法:
public static void callMethod(long i){
System.out.println("long");
}
这段代码会打印出long
第二件事情是将基本数据类型装箱。所以如果有一个方法接受整数(Integer),那么它将被调用。
第三个优先级是可变参数(VAR-ARGS)。
根据以上优先规则,我希望第二个优先级生效。也就是说,我期望int类型会被包装成Integer类型,并调用(Integer...)方法。但很明显这并没有发生,反而抛出了异常。
是否有人能看出来并解释为什么该优先级规则在此例中不适用呢?
谢谢!