<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Google 宣布廢棄 LiveData.observe 方法

          共 2691字,需瀏覽 6分鐘

           ·

          2021-12-13 13:37

          點(diǎn)擊關(guān)注公眾號,Java干貨及時(shí)送達(dá)


          粉絲福利:小編會(huì)從今天留言的小伙伴中隨機(jī)抽贈(zèng)送8.88元現(xiàn)金紅包。娛樂抽獎(jiǎng),大家隨緣積極參與啦,給生活一點(diǎn)小幸運(yùn)~感謝大家的支持


          廢棄?LiveData.observe()擴(kuò)展方法,已經(jīng)不是什么新的新聞了,在很久以前,Google 廢棄掉這個(gè)方法的時(shí)候,第一時(shí)間我在 朋友圈 和 掘金沸點(diǎn) 發(fā)過一個(gè)消息,如下圖所示。



          通過這篇文章你將學(xué)習(xí)到以下內(nèi)容:


          1. 為什么增加?LiveData.observe()?擴(kuò)展方法?

          2. 既然增加了,為什么又要廢棄?LiveData.observe()?擴(kuò)展方法?

          3. Kotlin 1.4 語法的特性:

          a. ?什么是函數(shù)式(SAM)接口?

          b. ?什么是 SAM 轉(zhuǎn)換?


          1
          為什么廢棄 LiveData.observe 擴(kuò)展方法


          我們先來看看官方是如何解釋,如下圖所示:



          在 Kotlin 1.4 上本身能夠?qū)⒛J(rèn)的?observe()?方法轉(zhuǎn)換為?lambda?語法,以前只有在使用 Kotlin 擴(kuò)展時(shí)才可用。因此將?LiveData.observe()?擴(kuò)展方法廢棄掉了。


          在 Kotlin 1.4 之前?LiveData.observe()?寫法如下所示。


          liveData.observe(this,?Observer<String>?{
          ????//?......
          })

          但是這種寫法有點(diǎn)復(fù)雜,因此 Google 在?lifecycle-livedata-ktx庫中添加了擴(kuò)展方法,使代碼更簡潔,可讀性更強(qiáng)。


          liveData.observe(this){
          ????//?......
          }


          在 Kotlin 1.4 時(shí),增加了一個(gè)新的特性?SAM conversions for Kotlin interfaces,支持將 SAM(單一抽象方法)接口,轉(zhuǎn)換成 lambda 表達(dá)式,因此廢棄了?LiveData.observe()?擴(kuò)展方法。所以升級?lifecycle-livedata-ktx?庫到最新版本,將會(huì)出現(xiàn)如下提示。

          https://kotlinlang.org/docs/whatsnew14.html#sam-conversions-for-kotlin-interfaces



          遷移也非常簡單,升級到 Kotlin 1.4 之后,只需要移除掉下列包的導(dǎo)入即可。


          import?androidx.lifecycle.observe

          2
          為什么增加 LiveData.observe 擴(kuò)展方法


          接下來我們一起來了解一下?LiveData.observe()?擴(kuò)展方法的由來,源于一位大神在 issuetracker 上提的一個(gè)問題, 如下圖所示:
          https://issuetracker.google.com/issues/111179594?pli=1



          大神認(rèn)為 SAM 轉(zhuǎn)換,可以使代碼更簡潔,可讀性更強(qiáng),因此期望 Google 能夠支持,現(xiàn)階段?LiveData.observe()?寫法相比 java8 是比較復(fù)雜的。


          //?java8
          liveData.observe(owner,?name?->?{
          ????//?......
          });

          //?SAM?轉(zhuǎn)換之前
          liveData.observe(this,?Observer?{?name?->?
          ????//?......
          })

          //?SAM?轉(zhuǎn)換之后
          liveData.observe(this){?name?->?
          ????//?......
          }

          這里需要插入兩個(gè) Kotlin 語法的知識點(diǎn):


          1. 什么是函數(shù)式(SAM)接口?

          2. 什么是 SAM 轉(zhuǎn)換?


          什么是函數(shù)式(SAM)接口


          只有一個(gè)抽象方法的接口稱為函數(shù)式接口或 SAM(單一抽象方法)接口。函數(shù)式接口可以有多個(gè)非抽象成員,但只能有一個(gè)抽象成員。


          什么是 SAM 轉(zhuǎn)換


          對于函數(shù)式接口,可以通過 lambda 表達(dá)式實(shí)現(xiàn) SAM 轉(zhuǎn)換,從而使代碼更簡潔,可讀性更強(qiáng),代碼如下所示。


          fun?interface?ByteCode?{
          ????fun?follow(name:?String)
          }
          fun?testFollow(bytecode:?ByteCode)?{
          ????//?......
          }

          //?傳統(tǒng)的使用方法
          testFollow(object?:?ByteCode{???
          ????override?fun?follow(name:?String)?{
          ????????//?......
          ????}
          })

          //?SAM?轉(zhuǎn)換
          testFollow{
          ????//?......
          }

          在 Kotlin 1.4 之前不支持實(shí)現(xiàn) SAM 轉(zhuǎn)換,于是 Google 在?lifecycle-livedata-ktx?庫中添加了?LiveData.observe()?擴(kuò)展方法,commit 如下圖所示。



          在 Kotlin 1.4 之后, Kotlin 開始支持 SAM 轉(zhuǎn)換,所以 Google 廢棄?LiveData.observe()?擴(kuò)展方法, Google 工程師也對此進(jìn)行了討論,如下圖所示。



          大神 Sergey Vasilinets 建議,為了不破壞源代碼兼容性,只是在這個(gè)版本中棄用。在以后的版本更新中將會(huì)更新錯(cuò)誤級別為 error,因此在這里建議如果已經(jīng)升級到了 Kotlin 1.4,將下列包的導(dǎo)入從代碼中移除即可。


          import?androidx.lifecycle.observe


          在 Kotlin 1.5.0 中使用 dynamic invocations (invokedynamic)????進(jìn)行編譯,實(shí)現(xiàn) SAM(單一抽象方法) 轉(zhuǎn)換,這個(gè)就不在本文討論范圍內(nèi),放在以后進(jìn)一步分析。

          https://kotlinlang.org/docs/whatsnew15.html#sam-adapters-via-invokedynamic


          1、致歉!抖音Semi Design承認(rèn)參考阿里Ant Design
          2、對比7種分布式事務(wù)方案,還是偏愛阿里開源的Seata,真香!
          3、Redis存儲結(jié)構(gòu)體信息,選hash還是string?
          4、掃盲 docker 常用命令
          5、最全分布式Session解決方案
          6、21 款 yyds 的 IDEA插件
          7、真香!用 IDEA 神器看源碼,效率真高!

          點(diǎn)分享

          點(diǎn)收藏

          點(diǎn)點(diǎn)贊

          點(diǎn)在看

          瀏覽 53
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  九九熟女 | 99视频在线免费看 | 毛片基地操逼视频 | 色色五月丁香 | 国产精品美女久久久久久久久 |