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

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

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

1.嵌套函數(shù)

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

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

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

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

不過(guò)這樣test2()方法體過(guò)大會(huì)導(dǎo)致test1()方法太長(zhǎng),所以嵌套函數(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都這樣寫(xiě)過(guò)于麻煩,這個(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ù)繼承的父類(lèi)組件填充正確的參數(shù)

3.延遲初始化lateinit var

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

lateinit var mContent: String
mContent = "test test"

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

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

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

定義一個(gè)變量:

var mData: String = ""

反編寫(xiě)成java代碼:

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

@JvmField
var mData: String = ""

反編譯成java代碼:

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

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

相關(guān)文章

最新評(píng)論

石柱| 长春市| 恩施市| 儋州市| 积石山| 河南省| 壤塘县| 武冈市| 贵定县| 阿坝县| 湖口县| 浦县| 永泰县| 封丘县| 汕尾市| 聂拉木县| 洪洞县| 梅河口市| 焉耆| 沂源县| 吴江市| 林口县| 伊川县| 靖州| 沅陵县| 江安县| 方正县| 法库县| 九江县| 甘泉县| 雅安市| 滁州市| 奎屯市| 安溪县| 云安县| 新宁县| 玛纳斯县| 灌阳县| 梅州市| 全州县| 淮安市|