1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果,假設(shè)我們已經(jīng)將新方法添加到接口 List,那么我們可以簡(jiǎn)單地在需要的地方(ArrayList、LinkedList 等)事件實(shí)現(xiàn)它,而無(wú)需默認(rèn)方法實(shí)現(xiàn)?
當(dāng)您不控制 的所有實(shí)現(xiàn)時(shí),您如何做到這一點(diǎn)List
?你(指 Java 大神)可以將它添加到 JDK 中,但是其他人代碼中的所有實(shí)現(xiàn)如何?那些將不再編譯。如果有人試圖在他們的實(shí)現(xiàn)中調(diào)用其中一種新方法(從以前編譯的 JAR 文件中),他們會(huì)MethodNotFoundError
在運(yùn)行時(shí)遇到麻煩。
向后兼容性意味著現(xiàn)有代碼無(wú)需修改即可工作。在這種情況下,它們的目標(biāo)是源代碼兼容性,這意味著您可以編譯相同的源代碼,而無(wú)需針對(duì)新的 Java 版本進(jìn)行更改。另一件事是二進(jìn)制兼容性,這意味著舊的編譯類繼續(xù)工作(Java 是著名的)。
源代碼兼容性不時(shí)被破壞(例如 JDBC API 因總是獲得新的接口方法而臭名昭著),但在這樣的中心類中卻沒(méi)有List
(JDBC 更改僅影響數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序供應(yīng)商,而不影響應(yīng)用程序代碼) .
因此,如果沒(méi)有默認(rèn)方法,就無(wú)法將新方法添加到List
接口中。它需要是一個(gè)額外的EnhancedList
或ListV8
(所有 JDK 列表都已經(jīng)實(shí)現(xiàn),但所有使用的代碼都需要重構(gòu)才能使用)。
添加回答
舉報(bào)