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

Android開發(fā)(Kotlin) 擴(kuò)展函數(shù)和運(yùn)算符重載的使用

 更新時(shí)間:2025年11月07日 09:28:40   作者:來來走走  
這篇文章介紹了Kotlin中的擴(kuò)展函數(shù)和運(yùn)算符重載,擴(kuò)展函數(shù)允許你在不修改現(xiàn)有類的情況下為其添加新函數(shù),而運(yùn)算符重載則允許你自定義運(yùn)算符的行為,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

擴(kuò)展函數(shù)

擴(kuò)展函數(shù)表示即使在不修改某個(gè)類的源碼的情況下,仍然可以打開這個(gè)類,向該類添加新的函數(shù)。
語法格式

fun ClassName.methodName(param1:Int,param2:Int):Int{
}

向String類中添加一個(gè)擴(kuò)展函數(shù),創(chuàng)建.kt文件,文件名沒有特殊要求。定義成頂層方法。

fun String.lettersCount(): Int {
    var count = 0
    for (char in this) {
        if (char.isLetter()) {
            count++
        }
    }
    return count
}

lettersCount()方法定義成了String類的擴(kuò)展函數(shù),函數(shù)就有了String實(shí)例的上下文,因此lettersCount()函數(shù)就不再需要接收一個(gè)參數(shù)了,直接遍歷this。
使用擴(kuò)展函數(shù)

   "ASDGHJH1564564&*^&*%&^".lettersCount()

運(yùn)行算符重載

運(yùn)算符重載使用的是operator關(guān)鍵字。在指定函數(shù)前面加上operator。不同的運(yùn)算符對(duì)應(yīng)的重載函數(shù)不同。麗例如,加號(hào)運(yùn)算符對(duì)應(yīng)的是plus()函數(shù),減號(hào)運(yùn)算符對(duì)應(yīng)的是minus()函數(shù)。
以加號(hào)運(yùn)算符為例的語法結(jié)構(gòu)

class obj{
	operator fun plus(obj:Obj):Obj{
	}
}

關(guān)鍵字operator 和plus是固定的。

讓兩個(gè)PowerConsumption對(duì)象相加。定義PowerConsumption類的結(jié)構(gòu),value代表用電量

class PowerConsumption(val value: Int) {
}

編寫運(yùn)算符重載

class PowerConsumption(val value: Int) {
    operator fun plus(powerConsumption: PowerConsumption): PowerConsumption {
        val sum = value + powerConsumption.value
        return PowerConsumption(sum)
    }
}

使用運(yùn)算符

        val powerConsumption1 = PowerConsumption(50)
        val powerConsumption2 = PowerConsumption(100)
        val powerConsumption3 = powerConsumption1 + powerConsumption2
        println(powerConsumption3.value)

運(yùn)算符重載有好多,對(duì)參考對(duì)照表使用

語法糖表達(dá)式實(shí)際調(diào)用函數(shù)
a+ba.plus(b)
a-ba.minus(b)
a*ba.times(b)
a/ba.div(b)
a%ba.rem(b)
a++a.inc()
a–a.dec(b)
+aa.unaryPlus()
-aa.unaryMinus()
!aa.not()
a ==ba.equals(b)
a > b a<b a>=b a<=ba.compareTo(b)
a…ba.rangeTo(b)
a[b]a.get(b)
a[b] = ca.set(b,c)
a in ba.contains(b,c)

擴(kuò)展函數(shù)及運(yùn)算符重載的聯(lián)合使用

下面是一個(gè)隨機(jī)生成字符串長度的函數(shù)。

    fun getRandomLengthString(str: String):String{
        val n = (1..20).random()
        val builder = StringBuilder()
        repeat(n){
            builder.append(str)
        }
        return  builder.toString()
    }

上面的代碼功能是將傳入str重復(fù)n次。是否能夠使用str*n這種寫法表示讓str字符串重復(fù)n次,kotlin可以實(shí)現(xiàn)。
要讓一個(gè)字符串乘以一個(gè)數(shù)字,肯定要在String類中重載乘號(hào)運(yùn)算符,但string類是系統(tǒng)提供的類,就只能使用擴(kuò)展函數(shù)了。

operator fun String.times(n: Int): String {
    val builder = StringBuilder()
    repeat(n) {
        builder.append(this)
    }
    return builder.toString()
}

使用String.times

        val str = "mnl"*3
        println(str)
mnlmnlmnl

到此這篇關(guān)于Android開發(fā)(Kotlin) 擴(kuò)展函數(shù)和運(yùn)算符重載的文章就介紹到這了,更多相關(guān)Android擴(kuò)展函數(shù)和運(yùn)算符重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

阳山县| 綦江县| 花莲市| 宁夏| 襄汾县| 青神县| 五常市| 海宁市| 定南县| 洪泽县| 丹东市| 陇川县| 保靖县| 高安市| 敖汉旗| 普兰县| 益阳市| 霍州市| 通江县| 朝阳市| 越西县| 日土县| 五原县| 阳朔县| 巴林左旗| 洛浦县| 孝昌县| 道真| 清丰县| 商洛市| 齐齐哈尔市| 五大连池市| 布拖县| 天柱县| 承德市| 青阳县| 马尔康县| 西充县| 英山县| 永安市| 澄迈县|