最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin 嵌套函數(shù)開發(fā)技巧詳解

 更新時(shí)間:2022年09月01日 17:04:32   作者:長安皈故里  
這篇文章主要為大家介紹了Kotlin 嵌套函數(shù)開發(fā)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.嵌套函數(shù)

業(yè)務(wù)開發(fā)中,我們可能會(huì)遇到這樣一個(gè)場(chǎng)景:一個(gè)函數(shù)只會(huì)被某一處多次調(diào)用,且不想讓這個(gè)函數(shù)在該類的其他地方調(diào)用,這個(gè)時(shí)候就需要對(duì)這個(gè)函數(shù)的訪問性進(jìn)行進(jìn)一步限制。

private是無法滿足的,這個(gè)時(shí)候我們就可以使用嵌套函數(shù)提供更好的封裝:

fun test1() {
    //被限制訪問行的函數(shù)
    fun test2(content: String) {
        println(content)
    }
    test2("hahaha")
    test2("babababa")
    test2("uuuuuuu")
}

這時(shí)候,只有test1()能夠被訪問,test2()是無法被除了test1()外的其他地方進(jìn)行訪問的

不過這樣test2()方法體過大會(huì)導(dǎo)致test1()方法太長,所以嵌套函數(shù)要根據(jù)具體場(chǎng)景選擇性使用

2.@JvmOverloads快捷實(shí)現(xiàn)函數(shù)重載

Android自定義View時(shí),一般需要定義三個(gè)構(gòu)造方法:

class CustomView : View {
    constructor(context: Context) : super(context)
    constructor(context: Context, attributes: AttributeSet? = null) : super(context, attributes)
    constructor(context: Context, attributes: AttributeSet? = null, defStyleAttr: Int) : super(
        context,
        attributes,
        defStyleAttr
    )
}

每次自定義View都這樣寫過于麻煩,這個(gè)時(shí)候就可以借用@JvmOverloads實(shí)現(xiàn)運(yùn)算符重載:

class CustomView @JvmOverloads constructor(
    context: Context,
    attributes: AttributeSet? = null,
    defStyleAttr: Int = 0
) : View(context, attributes, defStyleAttr) {
}

反編譯成java代碼看下:

可以看到,kotlin編輯器會(huì)自動(dòng)幫助我們生成三個(gè)重載構(gòu)造方法。

PS:當(dāng)@JvmOverloads使用在基于已有的WebView、EditText等組件自定義View時(shí),一定要注意第三個(gè)參數(shù)defStyleAttr默認(rèn)值時(shí)不一定為0的,需要根據(jù)繼承的父類組件填充正確的參數(shù)

3.延遲初始化lateinit var

日常開發(fā)中,我們會(huì)使用lateinit var實(shí)現(xiàn)屬性的延遲初始化:

lateinit var mContent: String
mContent = "test test"

使用延遲初始化的屬性,當(dāng)我們不確定這個(gè)屬性有沒有被初始化,可以通過下面方式判斷:

//判斷mContent有沒有被初始化
if (this::mContent.isLateinit) {
    Log.i("CustomView", "test: ")
}

4.@JvmField減少屬性set和get方法的生成

定義一個(gè)變量:

var mData: String = ""

反編寫成java代碼:

可以看到編譯器會(huì)自動(dòng)幫助我們生成mData的set、get方法,如果不想要編譯幫助我們生成屬性的set、get方法,可以添加@JvmField注解:

@JvmField
var mData: String = ""

反編譯成java代碼:

這樣系統(tǒng)就不會(huì)幫助我們生成get、set方法了,因?yàn)榫幾g器將mData的訪問修飾符改成了public

以上就是Kotlin 嵌套函數(shù)開發(fā)技巧詳解的詳細(xì)內(nèi)容,更多關(guān)于Kotlin 嵌套函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

江津市| 乐山市| 宁远县| 望谟县| 青岛市| 竹山县| 泰兴市| 沂水县| 涿州市| 本溪| 方正县| 十堰市| 松江区| 新巴尔虎左旗| 佛冈县| 宜春市| 黄石市| 体育| 广州市| 宣武区| 叙永县| 西乡县| 乌兰浩特市| 云浮市| 壶关县| 沙洋县| 武乡县| 萍乡市| 白玉县| 葵青区| 宁河县| 白城市| 五指山市| 封丘县| 宜宾县| 昌图县| 临沂市| 公安县| 富川| 汶上县| 万盛区|