Android開發(fā)(Kotlin) 擴(kuò)展函數(shù)和運(yùn)算符重載的使用
擴(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+b | a.plus(b) |
| a-b | a.minus(b) |
| a*b | a.times(b) |
| a/b | a.div(b) |
| a%b | a.rem(b) |
| a++ | a.inc() |
| a– | a.dec(b) |
| +a | a.unaryPlus() |
| -a | a.unaryMinus() |
| !a | a.not() |
| a ==b | a.equals(b) |
| a > b a<b a>=b a<=b | a.compareTo(b) |
| a…b | a.rangeTo(b) |
| a[b] | a.get(b) |
| a[b] = c | a.set(b,c) |
| a in b | a.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)文章
android自定義Camera實(shí)現(xiàn)錄像和拍照
這篇文章主要為大家詳細(xì)介紹了android自定義Camera實(shí)現(xiàn)錄像和拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android編程簡單實(shí)現(xiàn)雷達(dá)掃描效果
這篇文章主要介紹了Android編程簡單實(shí)現(xiàn)雷達(dá)掃描效果,涉及Android圖形繪制及顯示的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android中post請(qǐng)求傳遞json數(shù)據(jù)給服務(wù)端的實(shí)例
下面小編就為大家分享一篇Android中post請(qǐng)求傳遞json數(shù)據(jù)給服務(wù)端的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android自定義View實(shí)現(xiàn)自動(dòng)吸附功能
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)自動(dòng)吸附功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01
android實(shí)現(xiàn)簡單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Android學(xué)習(xí)教程之日歷控件使用(7)
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)教程之日歷控件操作代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android 修改viewpage滑動(dòng)速度的實(shí)現(xiàn)代碼
由于Viewpager的滑動(dòng)速度是固定的,所以很頭疼,下面小編通過實(shí)例代碼給大家分享android 修改viewpage滑動(dòng)速度的方法,需要的朋友參考下吧2017-09-09
Android判斷當(dāng)前App是在前臺(tái)還是在后臺(tái)
這篇文章主要為大家詳細(xì)介紹了Android判斷當(dāng)前App是在前臺(tái)還是在后臺(tái)的方法,感興趣的小伙伴們可以參考一下2016-08-08
Android中判斷網(wǎng)絡(luò)連接狀態(tài)的方法
App判斷用戶是否聯(lián)網(wǎng)是很普遍的需求,這篇文章主要介紹了Android中判斷網(wǎng)絡(luò)連接狀態(tài)的方法,感興趣的朋友可以參考一下2016-02-02

