为什么下面的程序会抛出异常?
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");
}
代码会打印很长
第二件事是对原语进行装箱。因此,如果有一种方法采用整数,那将是调用的方法。
第三个优先级是 var-args。
基于上述优先级,我希望第二个优先级是这种情况。我希望将 int 包装成一个 Integer 并调用 (Integer...) 。但是,这当然不会发生。相反,会引发异常。
有谁看到并可以解释为什么优先级不适用于此示例?
干杯!