簡介
Kotlin的擴(kuò)展函數(shù)功能使得我們可以為現(xiàn)有的類添加新的函數(shù)屈尼,實(shí)現(xiàn)某一具體功能 。
擴(kuò)展函數(shù)是靜態(tài)解析的斟冕,并未對原類添加函數(shù)或?qū)傩源浊蓿瑢︻惐旧頉]有任何影響搞挣。
擴(kuò)展屬性允許定義在類或者kotlin文件中,不允許定義在函數(shù)中音羞。
使用
fun Any.show(string: String) {
println(string)
}
fun Extend.show2(string: String){
println(string)
}
class Extend {
}
fun main(args: Array<String>) {
Extend().show("我是擴(kuò)展函數(shù)")
Extend().show2("我是擴(kuò)展函數(shù)")
}
擴(kuò)展屬性
類的擴(kuò)展屬性原理其實(shí)與擴(kuò)展方法是一樣的囱桨,只是定義的形式不同,擴(kuò)展屬性必須定義get和set方法嗅绰,并且類似于接口中定義的變量舍肠,沒有backingfield,即沒有field關(guān)鍵字窘面,不能用來存儲(chǔ)變量翠语。(一般的類屬性,在其對象實(shí)例中都會(huì)分配一點(diǎn)內(nèi)存來存儲(chǔ)屬性的值财边。
fun main(args: Array<String>) {
val str = "aa"
//沒有backing field肌括,不能存儲(chǔ)值,其實(shí)際是通過setXXX(str酣难,10)操作str
//輸出:aa10
str.s = 10
//輸出:2
println(str.s)
}
var String.s: Int
get() = this.length
set(value){
//set方法并沒有field可以用來存儲(chǔ)value谍夭,
//其實(shí)際作用是使用通過value來操作調(diào)用者,即this
//plus二元操作符a+b
println(this.plus(value))
}