日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin1.6.20好用的新特性:多receiver扩展函数,绝不可空类型,并行编译kotlin减少编译时间

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin1.6.20好用的新特性:多receiver扩展函数,绝不可空类型,并行编译kotlin减少编译时间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近kotlin1.6.20新版本出來了,并帶來了幾個很好用的特性,來嘗嘗鮮

正文

1.多receiver擴展函數

kt的擴展函數大家應該都懂,但什么是receiver呢?比如下面的代碼,是給View擴展的,View就是這個receiver的類型,而this@click就是這個receiver對象

fun View.click(onClick: (View) -> Unit) {setOnClickListener {onClick(this@click)} }

而多receiver那就是可以加多個this類型和對象,但有什么用呢?

比如我們定義一個點擊事件執行在協程中的擴展函數View.clickSuspend,我們可以用lifecycle的Scope,我們可以這樣寫:

但是這個clickSuspend函數只能在你的BaseActivity中定義,因為lifecycleScope是LifecycleOwner的擴展屬性,而LifecycleOwner和View我們都是無法修改的,如果想要在Fragment中使用,又要在BaseFragment中定義一遍(現實情況可能更糟(無法修改父類)),此時我們使用多receiver擴展函數就可以實現這種方式,如下圖所示

?其中View是主receiver,而context(LifecycleOwner)中的LifecycleOwner是副receiver,其可以有多個,主receiver用來顯式給類增加函數(語義上),而副receiver都只是隱式的,必須有其環境才能提示出此方法,比如上例中把View和LifecycleOwner顛倒則會找不到方法

其中this@方法名是獲取的主receiver,而如this@LifecycleOwner是獲取對應的副receiver

由于以下問題,所以此特性需要手動開啟,且暫不建議在線上項目中使用

?ps:kotlin添加開啟此特性的編譯參數的方式:

//GroovykotlinOptions {jvmTarget = '1.8'freeCompilerArgs = ["-Xcontext-receivers"]//this} //Kts freeCompilerArgs = listOf("-Xcontext-receivers")

2.絕不可空類型

絕不可控類型是什么類型呢?其實我覺得它就像是對kt類型漏洞的一種補充,我們可以看一下官網的代碼示例

?可以看出來,這個絕不可空類型是用來修飾泛型的,在泛型后加上&Any就可以表示這個參數或返回值肯定不會為空(經測試這個&Any是個固定的搭配)

其實特性在某些情況下還是挺有用的,但是我沒想到簡單常用的示例2333...

ps:啟用這個特性需要手動開啟1.7版本或者等到1.7版本就正式啟用了:

kotlin {sourceSets.all {languageSettings {languageVersion = '1.7'}} }

3.并行編譯kotlin減少編譯時間

編譯參數加上下面這行,可以開啟并行編譯kotlin,如果kotlin單體模塊是gradle編譯中比較耗時的任務時,開啟大概能減少15%的編譯時間

ps:這個N為0時表示每有一個cpu核心就會分配一個并行線程,其他數量則為你指定的數量,不要超過cpu核心數,否則因為線程切換而減弱效果

-Xbackend-threads=N

其他就是一些平時用不到的特性了,這三個可能以后會用到, end

參考:?What's new in Kotlin 1.6.20 | Kotlin

總結

以上是生活随笔為你收集整理的Kotlin1.6.20好用的新特性:多receiver扩展函数,绝不可空类型,并行编译kotlin减少编译时间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。