上一篇:Kotlin: 一步一步學(xué)(五) -- 高階函數(shù)
泛型
定義:在一般的編程模式下马昨,我們需要給任何一個(gè)變量指定一個(gè)具體的類型侵佃,而泛型允許我們在不指定具體類型的情況下進(jìn)行編程社露,這樣編寫出來的代碼將會(huì)擁有更好的擴(kuò)展性。
泛型有兩種定義方式:①泛型類害捕;②泛型方法。定義泛型的方法非常簡單,使用的語法都是<T>年枕。
泛型類
現(xiàn)在我們來定義一個(gè)泛型類,代碼如下所示:
class MyClass<T> { //在class后面添加<T>
fun method(param: T): T {
return param
}
}
//調(diào)用方式
val myClass = MyClass<Int>()
val result = myClass.method(123) //結(jié)果為123
此時(shí)的MyClass類就是一個(gè)泛型乎完,MyClass中的方法運(yùn)行使用T類型的參數(shù)和返回值熏兄。
這里我們將MyClass類的泛型指定成Int類型,于是method()方法就可以接收一個(gè)Int類型的參數(shù)树姨,并且它的返回值也變成了Int類型摩桶。
泛型方法
下面我們來定義一個(gè)泛型方法,代碼如下所示:
class MyClass{
fun <T>method(param: T): T {
return param
}
}
//調(diào)用方式
val myClass = MyClass()
val result = myClass.method<Int>(123) //結(jié)果為123, method后面的泛型定義<Int>可以省略帽揪。
你看硝清,現(xiàn)在是在調(diào)用method()方法的時(shí)候才指定泛型類型了。另外转晰,Kotlin有非常出色的類型推導(dǎo)機(jī)制芦拿,它能根據(jù)你傳入的參數(shù),自動(dòng)推導(dǎo)出泛型的類型查邢。故method后面的泛型指定<Int>可以省略不寫蔗崎。
委托
定義:委托是一種設(shè)計(jì)模式,操作對象自己不會(huì)去處理某段邏輯侠坎,而是把工作委托給另外一個(gè)輔助對象去處理蚁趁。
Kotlin對委托功能有很好的支持,并且把委托功能分成了兩種:類委托和屬性委托实胸。Kotlin中委托使用的關(guān)鍵字是by
他嫡。
類委托
類委托的核心思想在于將一個(gè)類的具體實(shí)現(xiàn)委托給另外一個(gè)類去完成番官。
示例代碼如下所示:
/**
* 模擬實(shí)現(xiàn)一個(gè)Set實(shí)現(xiàn)類。
*/
class MySet<T>(private val helperSet: HashSet<T>) : Set<T> by helperSet {
fun add() = println("Hello world")
override fun isEmpty(): Boolean {
return false
}
}
屬性委托
屬性委托的核心思想是將一個(gè)屬性的具體實(shí)現(xiàn)委托給另一個(gè)類去完成钢属。