java 無法僅僅依靠返回值的不同對方法進行重載的原因

對於java 程序員來說,都知道或聽過java 無法僅僅依靠返回值的不同對方法進行重載,但具體原因是什麼呢,在《深入理解Java虛擬機 JVM高級特性與最佳實踐》class類文件的結構-方法表集合這一章節給出了具體的原因(原文可參考6.3.6小節)。

重載一個方法時,必須確保有一個與原方法不同的特徵簽名,特徵簽名就是方法中各個參數在常量池中的字段符號引用的集合
從這句話中可以看到特徵簽名裏面不包含返回值類型,所以java無法僅僅依靠返回值類型的不同(即方法參數相同,只是返回值類型不同)對已有方法進行重載。

這裏需要注意一點:
“在Class文件格式中,特徵簽名的範圍更大一些,只要描述符不是完全一致的兩個方法也可以共存。也就是說,如果兩個方法有相同的名稱和特徵簽名,只有返回值不同,那麼也是可以合法共存於同一個Class文件中的”。



參考:
《深入理解Java虛擬機 JVM高級特性與最佳實踐》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章