Kotlin擴(kuò)展Extensions

Kotlin支持?jǐn)U展函數(shù)和擴(kuò)展屬性,它提供了擴(kuò)展新功能類的能力,而不需要從類繼承或使用任何類型的設(shè)計模式,僅僅通過擴(kuò)展申明即可完成。

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

1.1定義

擴(kuò)展函數(shù)是靜態(tài)解析的,它并不會對它擴(kuò)展的類產(chǎn)生任何影響,即通過定義擴(kuò)展函數(shù),它并不會對擴(kuò)展類產(chǎn)生任何成員變量或?qū)傩?,但是卻表現(xiàn)的就像是擴(kuò)展類的方法一樣。
上面這句話是不是還是感到有點抽象?我簡單概括一下:當(dāng)一個類所提供的public方法不足以解決我們開發(fā)的需求,或此類的某些方法在很多地方使用具有相似性,我們可以使用擴(kuò)展函數(shù)簡化這些操作,類似于Java中的Utils類提供的靜態(tài)方法。

1.2舉例

下面簡單舉例:

//ImageView拓展函數(shù)
fun ImageView.url(url: String?, circle: Boolean = false, errorRes: Int = R.mipmap.ic_error, 
holderRes: Int = R.mipmap.ic_holder) {
  val drawableRequest = Glide.with(context)
            .load(url)
            .placeholder(holderRes)
            .error(errorRes)
    if (circle) drawableRequest.bitmapTransform(CropCircleTransformation(context))
    drawableRequest.into(this)
}
//調(diào)用
imageView.url("xxx")
imageView.url("xxx",circle = true)
imageView.url("xxx",errorRes=R.mipmap.xxxx)

這里通過Glide為ImageView設(shè)置url圖片,它包括了是否取圓,占位圖,加載錯誤圖等等,只有url是必須傳入的,其它值均有默認(rèn)值,可不傳。調(diào)用時僅一句代碼即可完成,方便快捷,且不會對原有擴(kuò)展類ImageView產(chǎn)生任何影響,僅通過靜態(tài)編譯產(chǎn)生擴(kuò)展函數(shù)而已。
下面再舉個小例子,如開發(fā)金融類app,經(jīng)常需要對Double類型的數(shù)字進(jìn)行小數(shù)點后幾位取舍,那么使用擴(kuò)展函數(shù)就極為方便了,如字符串“剩余金額8888.88元”,“歷史年化10.8%”等。

//Double擴(kuò)展函數(shù)
fun Double.nail(nail: Int = 2, prefix: String = "", suffix: String = "") 
= "$prefix${String.format("%.${nail}f", this)}$suffix"
//調(diào)用(此處文字就不放strings里面了)
8888.88777.nail(prefix="剩余金額",suffix="元")
10.88.nail(nail = 1,prefix="歷史年化",suffix="%")

看了上面的示例,是不是很簡單?沒錯,kotlin擴(kuò)展函數(shù)就是這么簡單方便。

2.擴(kuò)展屬性

//為View設(shè)置左內(nèi)邊距
var View.leftPadding: Int
    set(value) {
        setPadding(value, paddingTop, paddingRight, paddingBottom)
    }
    get() = leftPadding
//調(diào)用
view.leftPadding = Util.dip2px(5)

至此,kotlin擴(kuò)展函數(shù)與擴(kuò)展屬性已全部完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,761評論 9 118
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,689評論 1 32
  • Google在今年的IO大會上宣布,將Android開發(fā)的官方語言更換為Kotlin,作為跟著Google玩兒An...
    藍(lán)灰_q閱讀 77,210評論 31 489
  • 本文是在學(xué)習(xí)和使用kotlin時的一些總結(jié)與體會,一些代碼示例來自于網(wǎng)絡(luò)或Kotlin官方文檔,持續(xù)更新... 對...
    竹塵居士閱讀 3,494評論 0 8
  • 22天,能有多大改變?能否治療懶、慫、拖延癥? 一位22歲的體驗者,以身試驗,感受到每天的小小變化。 22天前,她...
    朱諾醬閱讀 354評論 8 9

友情鏈接更多精彩內(nèi)容