2010-03-21 55 views

回答

9

爲什麼在方法重載時不考慮返回類型的方法?

主要的原因是,如果你沒有考慮此,很多函數調用變得模糊,如果返回值不分配給的東西。例如,在這裏調用哪個函數調用?

public String x() { ... } 
public int x() { ... } 

// ... 

x(); // <-- Which one did you mean? It's impossible to tell if you 
     //  allow return types to be part of method overloads. 

還有其他原因也不想這樣做。也就是說,許多語言做的只允許它們的簽名在返回類型上有所不同; Haskell和Perl就是兩個例子。如果你的語言確實允許這樣做,不難發現你需要支持的只是你的方法解決過程的又一步驟:簡單地讓編譯器選擇一種或另一種方法。在上面的例子中,我們可能會定義一個優先級(例如,定義的第一個方法是贏得的方法,例如,我們的x()調用將調用String x())。

需要注意的另一件事是JVM 確實允許兩個方法的簽名只有在返回類型存在。 (這是Scala和支持該其他JVM語言如何做到這一點。

+1

即使你確實是分配給它,它可以在一個類的情況和它的一個子曖昧 – 2010-03-21 06:09:10

+0

對付曖昧電話一個決勝規則可以導致令人討厭的驚喜;例如,如果程序員沒有注意到這一點有一個過載。這可能是Java語言設計師沒有采取這種方法的原因。 – 2010-03-21 07:51:13

+0

@Stephen C»對,我沒有說這是個好主意! :)我只是試圖說明沒有一個基本的技術問題可以防止這種情況發生(事實上,沒有一個,因爲Scala使用JVM並且具有這種能力,正如我在我的回答中所指出的那樣)。 – 2010-03-21 08:13:49

相關問題