什么是拓展态坦?
一個(gè)類(lèi)是由方法和字段
組成的,現(xiàn)在我要給這個(gè)類(lèi)加個(gè)方法或者字段
棒拂,這就是拓展伞梯。
拓展的好處:
我是一個(gè)普通的人,只有手腳帚屉,只能走路∶战耄現(xiàn)在給我拓展一下吧:安裝一雙翅膀,
ok攻旦,那我這下牛逼了喻旷,我會(huì)飛了。
同一個(gè)道理牢屋,在代碼中且预,將現(xiàn)有的類(lèi)增強(qiáng)一下,這個(gè)類(lèi)將獲得額外的功能烙无,變得牛逼起來(lái)了锋谐。
如何加呢?
- 方式1: 修改原有類(lèi)的代碼截酷,隨意的添加
方法或者字段
- 方式2: 通過(guò)繼承的方式怀估,讓其子類(lèi)添加
- 方式3: 通過(guò)裝飾器
以上方式都可以實(shí)現(xiàn)增強(qiáng)現(xiàn)有類(lèi)的功能,但是都有不少的缺點(diǎn):編碼麻煩合搅,入侵現(xiàn)有的代碼。
在kotlin中可以很方便的進(jìn)行拓展,如下:
拓展方法(函數(shù)):
將一個(gè)類(lèi)歧蕉,添加一個(gè)方法
類(lèi)名.方法名
例子:
拓展:
調(diào)用:
拓展屬性
將一個(gè)類(lèi)灾部,添加一個(gè)屬性
類(lèi)名.屬性
例子:
拓展:
調(diào)用:
關(guān)于拓展的奇思妙想
場(chǎng)景1
我們常常會(huì)在應(yīng)用程序中,彈出個(gè)toast
惯退,來(lái)提示用戶(hù)赌髓。
我們?cè)赼ctivity里面這樣寫(xiě):
Toast.makeText(this, "hello", Toast.LENGTH_SHORT).show()
我們只關(guān)注彈出的信息,這樣寫(xiě)催跪,最簡(jiǎn)單:
toast("hello")
ok锁蠕,給activity寫(xiě)一個(gè)拓展函數(shù)就可以啦:
fun Activity.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
我們常見(jiàn)的toast,各種dialog什么的懊蒸,我們以前的java代碼都能實(shí)現(xiàn)荣倾,
但是我們寫(xiě)了太多的繁瑣代碼,
我們可以通過(guò)拓展函數(shù)骑丸,將這些代碼模板化舌仍,
變成一個(gè)簡(jiǎn)單的方法妒貌,拓展至activity
或者fragment
中,極大的簡(jiǎn)化了開(kāi)發(fā)的姿勢(shì)铸豁,嘿嘿灌曙。
場(chǎng)景2
我們常用imageview
加載圖片,同樣少不了一堆模板代碼节芥,
嘗試用下拓展方法:
fun ImageView.load(url: String) {
Glide.with(context).load(url).into(this)
}
這樣直接調(diào)用imgeview.load()方法在刺,豈不是非常直觀簡(jiǎn)單?