電子商務(wù)網(wǎng)站建設(shè) iis怎樣做網(wǎng)站推廣
1、穩(wěn)定版對于枚舉、密封類與布爾值主語窮盡 when 語句
一個(gè)詳盡的when
語句包含了所有主題可能的類型或值的分支,或者對于一些類型包含一個(gè)else
分支。它覆蓋了所有可能的情況,使代碼更加安全。
即將禁止非詳盡的when
語句,以使行為與when
表達(dá)式一致。為了確保平滑的遷移,Kotlin 1.6.0 會(huì)對枚舉、密封類或布爾類型的主題的非詳盡的when
語句發(fā)出警告。這些警告將在未來的版本中變成錯(cuò)誤。
2、穩(wěn)定版掛起函數(shù)作為超類型
在Kotlin 1.6.0中,掛起函數(shù)類型的實(shí)現(xiàn)已經(jīng)變得穩(wěn)定。1.5.30提供了預(yù)覽版。
在設(shè)計(jì)使用Kotlin協(xié)程并接受掛起函數(shù)類型的api時(shí),該特性非常有用?,F(xiàn)在,可以通過將所需的行為封裝在實(shí)現(xiàn)掛起函數(shù)類型的單獨(dú)類中來簡化代碼。
class MyClickAction : suspend () -> Unit {override suspend fun invoke() { TODO() }
}fun launchOnClick(action: suspend () -> Unit) {}
在先前只允許使用lambda和掛起函數(shù)引用的地方,現(xiàn)在可以使用此類的實(shí)例:launchOnClick(MyClickAction())
。
目前由于實(shí)現(xiàn)細(xì)節(jié),存在兩個(gè)限制:
- 您不能在超類型列表中混合普通函數(shù)類型和暫停函數(shù)類型。
- 您不能使用多個(gè)暫停函數(shù)超類型。
3、穩(wěn)定版掛起轉(zhuǎn)換
Kotlin 1.6.0引入了從普通函數(shù)類型到掛起函數(shù)類型的穩(wěn)定轉(zhuǎn)換。從1.4.0開始,該功能支持函數(shù)字面值和可調(diào)用引用。在1.6.0中,它可以與任何形式的表達(dá)式一起使用。作為調(diào)用參數(shù),現(xiàn)在可以傳遞任何適合普通函數(shù)類型的表達(dá)式,其中預(yù)期是掛起函數(shù)類型。編譯器將自動(dòng)執(zhí)行隱式轉(zhuǎn)換。
fun getSuspending(suspending: suspend () -> Unit) {}fun suspending() {}fun test(regular: () -> Unit) {getSuspending { } // OKgetSuspending(::suspending) // OKgetSuspending(regular) // OK
}
4、穩(wěn)定版注解類實(shí)例化
Kotlin 1.5.30引入了在JVM平臺(tái)上實(shí)例化注解類的實(shí)驗(yàn)性支持。在1.6.0中,該功能默認(rèn)可用于Kotlin/JVM和Kotlin/JS。
5、改進(jìn)了遞歸泛型類型的類型推斷
Kotlin 1.5.30引入了對遞歸泛型類型的類型推斷的改進(jìn),使其僅基于對應(yīng)類型參數(shù)的上界即可推斷類型參數(shù)。該改進(jìn)只能在編譯器選項(xiàng)下使用。在版本1.6.0及更高版本中,默認(rèn)啟用了此功能
// Before 1.5.30
val containerA = PostgreSQLContainer<Nothing>(DockerImageName.parse("postgres:13-alpine")).apply {withDatabaseName("db")withUsername("user")withPassword("password")withInitScript("sql/schema.sql")
}// With compiler option in 1.5.30 or by default starting with 1.6.0
val containerB = PostgreSQLContainer(DockerImageName.parse("postgres:13-alpine")).withDatabaseName("db").withUsername("user").withPassword("password").withInitScript("sql/schema.sql")
6、構(gòu)建器類型推斷變更
Builder inference是一種類型推斷方式,用于調(diào)用泛型構(gòu)建器函數(shù)時(shí)非常有用。它可以通過lambda參數(shù)內(nèi)部調(diào)用的類型信息來推斷調(diào)用的類型參數(shù)。
進(jìn)行多個(gè)更改,以更接近完全穩(wěn)定的builder推斷。從1.6.0開始:
可以在builder lambda中調(diào)用返回尚未推斷類型實(shí)例的函數(shù),而無需指定1.5.30中引入的-Xunrestricted-builder-inference編譯器選項(xiàng)。 通過使用-Xenable-builder-inference,可以編寫自己的構(gòu)建器而無需應(yīng)用@BuilderInference注解。
請注意,這些構(gòu)建器的客戶端將需要指定相同的-Xenable-builder-inference編譯器選項(xiàng)。
使用-Xenable-builder-inference,如果常規(guī)類型推斷無法獲取關(guān)于類型的足夠信息,則builder推斷將自動(dòng)激活。
7、對類的類型參數(shù)上注解的支持
@Target(AnnotationTarget.TYPE_PARAMETER)
annotation class BoxContentclass Box<@BoxContent T> {}
所有類型參數(shù)上的注解都會(huì)被編譯為 JVM 字節(jié)碼,這樣注解處理器就可以使用它們。
8、標(biāo)準(zhǔn)庫
- 新版 readline 函數(shù)
- 穩(wěn)定版 typeOf()
- 穩(wěn)定版集合構(gòu)建器
- 穩(wěn)定版 Duration API
- 按 Regex 拆分為序列
- 整數(shù)的循環(huán)移位運(yùn)算
- JS 平臺(tái) replace() 與 replaceFirst() 的變更
- 既有 API 的改進(jìn)
- 棄用項(xiàng)