欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Java8默認方法會破壞用戶的代碼嗎

這篇文章主要講解了“Java8默認方法會破壞用戶的代碼嗎”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java8默認方法會破壞用戶的代碼嗎”吧!

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、福綿ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的福綿網(wǎng)站制作公司

Java8默認方法會破壞用戶的代碼嗎

起初看來,默認方法給Java虛擬機的指令集帶來了很多新的特性。最終,開發(fā)庫的人能夠在不帶來客戶端代碼的兼容性問題的情況下,升級API。使用 默認方法,任何實現(xiàn)庫接口的類都自動適應(yīng)接口引入的默認方法。一旦用戶更新了他實現(xiàn)的類,就能夠很簡單使用更有意義的方法來覆蓋原有默認方法。更好的是, 用戶可以在覆蓋方法時候,調(diào)用接口的默認實現(xiàn),同時增加業(yè)務(wù)邏輯。

到現(xiàn)在為止,一切都是很好。但是,在創(chuàng)建接口的時候增加默認方法可能使得Java代碼不兼容。這個從下面的例子可以很容易弄明白。我們假設(shè)一個庫需要它的一個接口的作為輸入:

interface SimpleInput {   void foo();   void bar(); }  abstract class SimpleInputAdapter implements SimpleInput {   @Override   public void bar() {     // some default behavior ...   } }

Java 8之前,類似于上面聯(lián)合使用一個接口和一個適配器類的方式,是Java程序語言中一種非常常用的設(shè)計模式。該適配器通常由庫提供者提供,用于節(jié)省庫的使用者的某些操作。但是,如果采用接口的方式提供,就類似允許多重繼承了。

我們進一步假設(shè)一個用戶使用了如下的適配器:

class MyInput extends SimpleInputAdapter {   @Override   public void foo() {     // do something ...   }   @Override   public void bar() {     super.bar();     // do something additionally ...   } }

通過這種實現(xiàn)方式,我們最終可以和庫進行交互。注意我們是怎樣覆蓋bar方法,并為默認的實現(xiàn)增加額外的功能的。

如果將該庫移植到Java 8,將會發(fā)生什么呢?首先,該庫很大可能性會廢棄適配器類,而使用默認方法提供該功能。最終,該接口的形式類似如下所示:

interface SimpleInput {   void foo();   default void bar() {     // some default behavior   } }

使用這個新的接口,用戶可以更新他的代碼,采用默認方法來代替原來的適配器類。通過使用接口代替適配器類的***的結(jié)果是,該類可以繼承 (extend)其它的類,而不是特定的適配器?,F(xiàn)在我們進行實踐,移植MyInput類使其使用默認方法。因為我們現(xiàn)在能繼承其它類了,所以我們繼承一 個第三方的基礎(chǔ)類。我們這里不需要關(guān)心這個基礎(chǔ)類的作用,我們可以假設(shè)這個對我們的功能是有意義的。

class MyInput extends ThirdPartyBaseClass implements SimpleInput {   @Override   public void foo() {     // do something ...   }   @Override   public void bar() {     SimpleInput.super.bar();     // do something additionally ...   } }

為了實現(xiàn)原始類相似的功能,我們使用Java 8的新的語法來調(diào)用指定接口的默認方法。同時,將我們方法中的一些邏輯移到基礎(chǔ)類中去。此時,你可能拍著我的肩膀說,這是一次非常好的重構(gòu)!

我們相當(dāng)成功的使用了該庫。但是,維護人員需要增加另一個接口來提供更多的功能。該接口被 ComplexInput 接口所代替,這個接口繼承自  SimpleInput 接口,并增加了新的方法。因為默認方法通常來說是可以很安全的添加的,因此,維護人員覆蓋了 SimpleInput  的默認方法,提供了一個更好的默認方法。畢竟,這對于采用適配器類的方式來說是很平常的事情。

interface ComplexInput extends SimpleInput {   void qux();   @Override   default void bar() {     SimpleInput.super.bar();     // so complex, we need to do more ...   } }

新的特性帶來了非常好的效果以至于維護 ThirdPartyBaseClass 的人也決定依賴該庫。為了完成這項工作,它在 ThirdPartyLibrary 中實現(xiàn)了 ComplexInput 接口。

但是這對 MyInput 類來說意味著什么呢?為了隱式的實現(xiàn) ComplexInput 接口,可繼承  ThirdPartyBaseClass 類,但是調(diào)用 SimpleInput  的默認方法突然變成非法的了。結(jié)果,用戶的代碼不能通過編譯。現(xiàn)在這種調(diào)用是被禁止的,因為Java認為這種在非直接子類中調(diào)用父類的父類的方法是非法 的。你只能在 ComplexInput  中去調(diào)用該默認方法,但是,這要求你顯示的在MyInput中實現(xiàn)該接口。對于庫的用戶來說,這種改變不是所預(yù)期的!

更奇怪的是,Java運行時卻不做這種限制。JVM的校驗器是允許一個編譯好的類去調(diào)用 SimpleInput::foo  方法的,即使該類是通過繼承更新后的 ThirdPartyBaseClass,從而隱式的實現(xiàn)了ComplexClass。這種限制只存在于編譯器中。

感謝各位的閱讀,以上就是“Java8默認方法會破壞用戶的代碼嗎”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java8默認方法會破壞用戶的代碼嗎這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

本文題目:Java8默認方法會破壞用戶的代碼嗎
文章路徑:http://aaarwkj.com/article48/pcdphp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷微信小程序、網(wǎng)站設(shè)計、網(wǎng)站策劃、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
欧美日韩黄色的三级视频| 麻豆影片在线免费观看| 日本东京热不卡一区二区| 18禁免费无遮挡免费视频| 国产一区二区三区不卡视频| 亚洲视频在线视频看视频在线 | 久久精品国产视频在热| 国产欧美一区二区另类精品| 99热这里66只有精品| 黄色永久网站在线播放| 日本一区二区裸体视频| 美女床上激情啪啪网页| 在线一区二区三区成人观看| 日本一区中文字幕欧美| 蜜臀av午夜福利在线| 欧美成人精品三级在线网站| 日本久久精品视频一区| 强乱人妻中文字幕日本| 日本欧美国产污黄在线观看| 日韩一级不卡高清视频| 麻豆精品午夜福利在线| 视频一区欧美日韩精品| 欧美日韩在线亚洲二区综二| 欧美成人精品资源在线观看| 亚洲午夜天堂在线a毛片| 欧美色高清视频在线播放| 青青草原精品资源视频| 熟女人妻视频一区二区| 四虎成人免费永久视频| 久久99精品久久久国产| 视频一区日本视频二区| 日韩欧美亚洲国产另类| 精品一区二区在线欧美日韩| 色噜噜狠狠狠久久综合一区| 亚洲日本高清一二三区| 午夜性色福利视频你懂的| 国产一区二区黑丝美女| 在线观看后入大屁股| 一区二区亚洲成人精品| 久久成人午夜免费电影| 国产麻豆91精品女同性恋|