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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

kotlin学习笔记——内联函数

發布時間:2024/4/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kotlin学习笔记——内联函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Kotlin中,使用inline修飾符標記內聯函數。 與普通函數不同,內聯函數在編譯時被替換掉,不是真正的函數調用。 如kotlin提供的with函數,如下: @kotlin.internal.InlineOnly public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block() 接收一個對象receiver和一個函數block,函數體是用這個對象來執行函數receiver.block(),相當于對receiver擴展了block函數。 注意:“T.() -> R”表示這個傳入的函數是對T的擴展函數,所以在函數體中才可以receiver.block()。如果改成“() -> R”則receiver.block()會報錯,直接使用block()才行。 通過內聯函數可以簡化代碼,如: inline fun supportLollipop(code: () -> Unit){if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){code()} } 這樣當我們想在高版本執行代碼時,直接使用這個函數即可,如: supportLollipop{... } 1、with函數 with函數接收一個對象和一個擴展函數,作用是在這個對象上擴展這個函數,這樣在函數中可以以this的形式使用該對象。在對一個對象做很多操作時,使用with可以簡化代碼,如: with(person1){nameView.text = nameageView.text = age.toString()detailView.text = "name:$name, age:$age" } 就可以不用寫類似person1.name之類的代碼了。 2、let函數 let函數很簡單,接收一個函數作為參數,將函數的返回值作為let函數的返回值。在處理可null對象是很有用。 inline fun <T, R> T.let(f: (T) -> R): R = f(this) 使用了兩個泛型,T是調用者類型,同時也是接收函數所接收的參數類型;R是返回值類型。 如何使用呢,假設有這樣的代碼: val obj = if(item != null) manager.transfor(item) else null 使用let函數就可以簡化為 val obj = item?.let( manager.transfor(it) ) 因為有"?."操作符,只有當item不為null的時候才會執行代碼,所以為null的時候直接返回null給obj。(注意執行transfor時item已經是非null了,所以transfor可以接受非null參數) 3、apply函數 apply函數與with函數很相似,不同處是apply函數會在執行接收的函數后返回this。 inline fun <T> T.apply(f: T.() -> Unit): T { f(); return this } apply函數可以使我們避免創建builder,如: val textView = TextView(context).apply{text = "hello"hint = "hint"textColor = android.R.color.white } 當然我們也可以使用with,如: val textView = with( TextView(context) ){...this }

最后要手動返回this,所以這種情況下使用apply會更加方便一些。(注意with是沒有調用者的

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的kotlin学习笔记——内联函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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