
上一篇:Kotlin: 一步一步學(xué)(五) -- 高階函數(shù)
泛型
定義:在一般的編程模式下,我們需要給任何一個變量指定一個具體的類型,而泛型允許我們在不指定具體類型的情況下進行編程,這樣編寫出來的代碼將會擁有更好的擴展性。
泛型有兩種定義方式:①泛型類;②泛型方法。定義泛型的方法非常簡單,使用的語法都是<T>。
泛型類
現(xiàn)在我們來定義一個泛型類,代碼如下所示:
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
此時的MyClass類就是一個泛型,MyClass中的方法運行使用T類型的參數(shù)和返回值。
這里我們將MyClass類的泛型指定成Int類型,于是method()方法就可以接收一個Int類型的參數(shù),并且它的返回值也變成了Int類型。
泛型方法
下面我們來定義一個泛型方法,代碼如下所示:
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()方法的時候才指定泛型類型了。另外,Kotlin有非常出色的類型推導(dǎo)機制,它能根據(jù)你傳入的參數(shù),自動推導(dǎo)出泛型的類型。故method后面的泛型指定<Int>可以省略不寫。
委托
定義:委托是一種設(shè)計模式,操作對象自己不會去處理某段邏輯,而是把工作委托給另外一個輔助對象去處理。
Kotlin對委托功能有很好的支持,并且把委托功能分成了兩種:類委托和屬性委托。Kotlin中委托使用的關(guān)鍵字是by。
類委托
類委托的核心思想在于將一個類的具體實現(xiàn)委托給另外一個類去完成。
示例代碼如下所示:
/**
* 模擬實現(xiàn)一個Set實現(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
}
}
屬性委托
屬性委托的核心思想是將一個屬性的具體實現(xiàn)委托給另一個類去完成。