Kotlin 泛型在許多場景中都非常有用,以下是一些典型的應(yīng)用場景:
函數(shù)參數(shù)和返回值類型: 當(dāng)你希望編寫一個可以接受多種數(shù)據(jù)類型的函數(shù),但又不想為每種數(shù)據(jù)類型都編寫一個新的函數(shù)時,可以使用泛型。
fun <T> printList(list: List<T>): Unit {
for (item in list) {
println(item)
}
}
類和方法: 泛型允許你創(chuàng)建可以處理多種數(shù)據(jù)類型的通用類或方法。
class Box<T>(val value: T) {
fun getValue(): T = value
}
fun <T> printBoxValue(box: Box<T>): Unit {
println(box.getValue())
}
集合類型: Kotlin 的集合框架已經(jīng)內(nèi)置了對泛型的支持,這使得你可以輕松地在集合中存儲和操作多種數(shù)據(jù)類型的元素。
val list = listOf(1, "two", 3.0) // List<Any>
val map = mapOf("key1" to 1, "key2" to "two", "key3" to 3.0) // Map<String, Any>
避免類型轉(zhuǎn)換: 使用泛型可以減少在代碼中進(jìn)行顯式的類型轉(zhuǎn)換,從而提高代碼的可讀性和安全性。
fun <T> safeCast(obj: Any?): T? {
return obj as? T
}
約束和邊界:
你可以使用 where
子句為泛型參數(shù)設(shè)置約束,以確保只有滿足特定條件的類型才能被使用。
fun <T : Comparable<T>> findMax(list: List<T>): T {
return list.maxOrNull() ?: throw IllegalStateException("List is empty")
}
擴(kuò)展函數(shù)和屬性: 泛型允許你為現(xiàn)有類型編寫擴(kuò)展函數(shù)和屬性,而無需修改這些類型的定義。
fun <T> Iterable<T>.printElements() {
for (element in this) {
println(element)
}
}
val list = listOf(1, 2, 3)
list.printElements() // 輸出: 1 2 3
總之,Kotlin 泛型提供了一種靈活且強(qiáng)大的方式來處理多種數(shù)據(jù)類型,同時保持代碼的簡潔和可讀性。