爲什麼在方法重載時不考慮返回類型的方法? 有人可以解釋,編譯器如何檢查重載的方法?爲什麼在Java方法重載中不考慮返回類型?
1
A
回答
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語言如何做到這一點。
2
有人可以解釋,如何編譯器檢查重載方法?
Java語言規範,部分8.4.9,將包含明確(但非常技術性的)答案: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.9
相關問題
- 1. 爲什麼區分方法時不考慮返回類型?
- 2. 爲什麼在類方法中什麼都不返回?
- 3. Java中重載和方法返回類型的關係?
- 4. 爲什麼方法返回類型不包含在方法簽名中?
- 5. 返回類型爲void的方法返回的是什麼?
- 6. 在Java方法重載爲什麼允許有協變返回類型,但不是協變的參數?
- 7. 宏是什麼類型的考慮?
- 8. 爲什麼前綴增量重載返回類型而不是類型?
- 9. 爲什麼方法的簽名不包含返回類型?
- 10. Python調整返回類型以考慮輸入類型
- 11. 在try塊java中返回語句。什麼會被方法返回,爲什麼?
- 12. 爲什麼重載的scala函數需要返回類型?
- 13. 爲什麼自動返回類型改變重載分辨率?
- 14. 如何在C++中獲取返回類型的重載方法?
- 15. 類返回類型重載
- 16. 從java方法返回泛型類型
- 17. 爲什麼返回類型在ArrayList添加方法中有所不同?
- 18. Java:在不同返回類型的派生類中重寫方法?
- 19. 重載方法可能有不同的返回類型嗎?
- 20. 帶有不同簽名和返回類型的方法重載
- 21. .NET爲什麼「Anchor」不考慮Toolstrip?
- 22. 爲什麼AutoConfigurationPackages不考慮@ComponentScan?
- 23. 爲什麼輸出不考慮函數?
- 24. 爲什麼dot語法不能用於返回類型爲instancetype的方法?
- 25. 爲什麼java String中的「contains」方法返回找不到?
- 26. 重載返回類型?
- 27. 返回類型重載?
- 28. 爲什麼返回類型的方法是抽象的?
- 29. 爲什麼我的方法期待錯誤的返回類型?
- 30. 爲什麼部分方法只能有void返回類型?
即使你確實是分配給它,它可以在一個類的情況和它的一個子曖昧 – 2010-03-21 06:09:10
對付曖昧電話一個決勝規則可以導致令人討厭的驚喜;例如,如果程序員沒有注意到這一點有一個過載。這可能是Java語言設計師沒有采取這種方法的原因。 – 2010-03-21 07:51:13
@Stephen C»對,我沒有說這是個好主意! :)我只是試圖說明沒有一個基本的技術問題可以防止這種情況發生(事實上,沒有一個,因爲Scala使用JVM並且具有這種能力,正如我在我的回答中所指出的那樣)。 – 2010-03-21 08:13:49