爲什麼在編譯時這個聲明不被認爲是模糊的?爲什麼一個參數被任意數量的參數版本重載的方法編譯
void f(int a) {
System.out.println("int");
}
void f(int... a) {
System.out.println("int...");
}
例如爲:
f(2); // to one parameter both method should match (f(int) runs)
f(2,2); // f(int...)
我沒有時間去找它,但我敢打賭,答案是在[JLS第15.12.2節](http://docs.oracle.com/javase/specs/jls/se7/html /jls-15.html#jls-15.12.2)。 – 2013-02-11 09:25:38
那麼,如果編譯器能夠找到調用的完全匹配,那麼它就會這樣做,而不是var-args甚至是裝箱。 – 2013-02-11 09:28:06