爲什麼下面的程序會拋出異常?SCJP問題:使用var-args重載Java方法。基本原理是什麼?
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(整數[])是不明確的類型MainClass
行,我可以看到,這兩種方法的將工作(如果其他的被註釋掉了),但是我也知道,如果一個原語與一個方法的輸入類型不完全匹配,會發生什麼。
嘗試的第一件事是擴大原語。所以,如果還有第三個方法:
public static void callMethod(long i){
System.out.println("long");
}
的代碼將打印長
的第二件事是框原始。所以如果有一個採用整數的方法,那將是一個被調用的方法。
第三個優先級是var-args。
根據上述優先級,我認爲第二個可能性是這種情況。我期望int被包裝成一個Integer並且(Integer ...)將被調用。但是,這當然不會發生。相反,拋出異常。
有沒有人看到並可以解釋爲什麼優先級不適用於此示例?
乾杯!
我有點認爲它嘗試了三種方法,第一個是「invocable」將被調用。雖然該方法採取(整數...我),我有點期待拳擊整數將使該方法「invocable」。但是,正如你所說,似乎後來的「變異性」也被考慮在內。乾杯! – 2010-02-23 21:59:50