在section 15.12.2.5 of the Java Language Specification,它談論如何選擇最具體的方法在具有固定元數的方法和變量元數的方法(即varargs
)兩種情況。既固定/可變元數的(可變參數)的比賽最具體方法
但是我在JLS中找不到的是關於決定兩種方法之間的任何事情,其中其中一個是固定參數,另一個是可變參數。例如:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
編譯就好正如人們所預料(下面的號Yoni列出的原因)。這調用代碼也編譯:
SomeApi api = ...
Object o = api.getSomething("Hello");
,如果你運行它,method #1
(即非可變參數方法)被調用。爲什麼這個調用代碼不含糊?爲什麼固定方法比變量方法更具體?有人能指點我的規格的相關位?
只是好奇...你有認識的,除了學術興趣特定的原因是什麼? (我試圖實現運行時調度選擇+想知道還有誰可能會這樣做) – 2011-05-16 21:08:35