第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java 中類(lèi)型擦除后具有相同簽名的靜態(tài)方法

Java 中類(lèi)型擦除后具有相同簽名的靜態(tài)方法

動(dòng)漫人物 2023-11-01 16:57:22
這是關(guān)于 Java 中使用參數(shù)化類(lèi)型的簽名方法的另一個(gè)問(wèn)題。假設(shè)您有以下兩種方法:    static void f(List<Integer> l) {}         static void f(List<String> l) {}編譯器會(huì)抱怨兩種方法在類(lèi)型擦除后具有相同的簽名(兩種參數(shù)類(lèi)型都被擦除為僅List)。stackoverflow 上的許多類(lèi)似問(wèn)題都詢(xún)問(wèn)為什么會(huì)這樣,但問(wèn)題始終是關(guān)于實(shí)例(非靜態(tài))方法(例如,請(qǐng)參閱方法與類(lèi)型中的另一個(gè)方法具有相同的擦除)。通常一半的答案基于以下(非常錯(cuò)誤的)論點(diǎn):編譯器將刪除字節(jié)碼中的所有類(lèi)型參數(shù)并使方法無(wú)法區(qū)分。好吧,只需打印字節(jié)碼javap,您就會(huì)看到是否所有內(nèi)容都被刪除了?。m然字節(jié)碼丟失了大量參數(shù)化數(shù)據(jù),但實(shí)際上保留了完整的方法簽名,當(dāng)您想要使用包含泛型類(lèi)和方法的依賴(lài)項(xiàng)編譯新類(lèi)時(shí),這絕對(duì)有用)。另一方面,最好的答案通常引用 JLS 8.4.2 并解釋說(shuō),為了與舊的、預(yù)通用的 Java 版本(以及較新版本中的原始類(lèi)型)兼容,禁止使用具有覆蓋等效簽名的方法。我同意后一個(gè)論點(diǎn),但它只意味著實(shí)例方法(非靜態(tài)),因?yàn)殪o態(tài)方法無(wú)論如何都不能被覆蓋。靜態(tài)方法可能有類(lèi)似的解釋?zhuān)椅茨苤赋鏊?。有人可以幫助我理解這一點(diǎn)嗎?
查看完整描述

1 回答

?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊

關(guān)于向后兼容性的爭(zhēng)論仍然成立。

如果您有這段代碼(不使用泛型,強(qiáng)烈建議不要使用,但即使在今天也是合法的,并且在應(yīng)該仍然可以編譯的 Java 1.4 代碼中完全正常),編譯器應(yīng)該選擇您的兩種方法中的哪一種?

List rawList = new ArrayList();
YourClass.f(rawList);

更重要的是,假設(shè)您以某種方式選擇兩者之一,在生成的調(diào)用站點(diǎn)字節(jié)碼中,泛型仍然會(huì)被刪除,因此在運(yùn)行時(shí),JVM 不知道您指的是兩者中的哪一個(gè)f(List)。方法調(diào)用指定方法名稱(chēng)和簽名,但該簽名不包括泛型。這并不是出于兼容性問(wèn)題。他們是否可以嘗試使用帶有擴(kuò)展調(diào)用規(guī)范的新操作碼之類(lèi)的東西來(lái)更努力地推動(dòng)這一點(diǎn)?或許。但現(xiàn)在就是這樣。

另一方面,最好的答案通常引用 JLS 8.4.2 并解釋說(shuō),為了與舊的、預(yù)通用的 Java 版本(以及較新版本中的原始類(lèi)型)兼容,禁止使用具有覆蓋等效簽名的方法。

我同意后一個(gè)論點(diǎn),但它只意味著實(shí)例方法(非靜態(tài)),因?yàn)殪o態(tài)方法無(wú)論如何都不能被覆蓋。

好吧,您不能覆蓋靜態(tài)方法,但是您的兩個(gè)方法仍然是“覆蓋等效的”,這意味著它們的簽名非常接近,以至于您一次只能擁有其中一個(gè)(在子類(lèi)情況下,一個(gè)如果因此而繼承,則會(huì)覆蓋另一個(gè)方法 --- 但這也意味著您不能在同一個(gè)類(lèi)上擁有兩個(gè)這樣的方法)。

請(qǐng)注意,這不會(huì)造成任何實(shí)際問(wèn)題,因?yàn)槟冀K可以通過(guò)更改為不同的方法名稱(chēng)來(lái)避免“重載”。


查看完整回答
反對(duì) 回復(fù) 2023-11-01
  • 1 回答
  • 0 關(guān)注
  • 234 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)