爲什麼在方法重載時不考慮返回類型的方法? 有人可以解釋,編譯器如何檢查重載的方法?爲什麼在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. Java中重載和方法返回類型的關係?
- 3. 在Java方法重載爲什麼允許有協變返回類型,但不是協變的參數?
- 4. 返回類型爲void的方法返回的是什麼?
- 5. 宏是什麼類型的考慮?
- 6. Python調整返回類型以考慮輸入類型
- 7. 在try塊java中返回語句。什麼會被方法返回,爲什麼?
- 8. 如何在C++中獲取返回類型的重載方法?
- 9. 類返回類型重載
- 10. 爲什麼自動返回類型改變重載分辨率?
- 11. 從java方法返回泛型類型
- 12. Java:在不同返回類型的派生類中重寫方法?
- 13. 帶有不同簽名和返回類型的方法重載
- 14. 重載方法可能有不同的返回類型嗎?
- 15. 爲什麼java String中的「contains」方法返回找不到?
- 16. 爲什麼AutoConfigurationPackages不考慮@ComponentScan?
- 17. 返回類型重載?
- 18. Java 5+ API爲什麼不利用協變返回類型?
- 19. 爲什麼部分方法只能有void返回類型?
- 20. 爲什麼返回類型的方法是抽象的?
- 21. 爲什麼使用通用類型的泛型返回方法不正確?
- 22. java - 方法返回類型混淆
- 23. 返回的Java方法接口類型
- 24. 返回接口類型的Java方法
- 25. 爲什麼與該類名稱相同的方法不需要返回類型?
- 26. 爲什麼此Java方法看起來有兩種返回類型?
- 27. Java - 爲什麼Eclipse告訴我我的方法必須返回int類型?
- 28. 爲什麼添加返回類型的空隙返回方法導致MissingMethodException
- 29. 爲什麼有必要在魔術方法重載中返回「自我」?
- 30. 爲什麼在Java Stream接口中重載()的varargs方法?
即使你確實是分配給它,它可以在一個類的情況和它的一個子曖昧 – 2010-03-21 06:09:10
對付曖昧電話一個決勝規則可以導致令人討厭的驚喜;例如,如果程序員沒有注意到這一點有一個過載。這可能是Java語言設計師沒有采取這種方法的原因。 – 2010-03-21 07:51:13
@Stephen C»對,我沒有說這是個好主意! :)我只是試圖說明沒有一個基本的技術問題可以防止這種情況發生(事實上,沒有一個,因爲Scala使用JVM並且具有這種能力,正如我在我的回答中所指出的那樣)。 – 2010-03-21 08:13:49