1.泛型
泛型允許我們不指定具體類型的情況下進行編程
泛型的兩種定義方式:泛型類,泛型方法
//泛型類
class MyClass<T> {
fun method(param: T): T {
return param
}
}
//泛型方法
fun <T> method(param: T): T {
return param
}
具體應用:
fun <T> T.build(block:T.() ->Unit):T{
block
return this
}
//上面就是完成一個類型apply擴展函數的功能
2.類委託和委託屬性
委託基本概念:操作對象自己不會去處理某段邏輯,而是會將工作委託給另一個輔助對象去處理。
類委託如下:
class MySet<T>(val helperSet:HashSet<T>):Set<T>{
override val size: Int
get() = helperSet.size
override fun contains(element: T): Boolean = helperSet.contains(element)
override fun containsAll(elements: Collection<T>): Boolean = helperSet.containsAll(elements)
override fun isEmpty(): Boolean = helperSet.isEmpty()
override fun iterator(): Iterator<T> = helperSet.iterator()
}
//下面代碼相當於上面代碼,將操作委託給helperSet
class MySet<T>(val helperSet:HashSet<T>):Set<T> by helperSet{
}
委託屬性:將屬性委託給其他的類處理
lazy函數懶加載技術原理:通過by委託屬性然後在調用獲取值的時候才調用getValue