Kotlin 泛型在许多场景中都非常有用,以下是一些典型的应用场景:
函数参数和返回值类型: 当你希望编写一个可以接受多种数据类型的函数,但又不想为每种数据类型都编写一个新的函数时,可以使用泛型。
fun <T> printList(list: List<T>): Unit {
for (item in list) {
println(item)
}
}
类和方法: 泛型允许你创建可以处理多种数据类型的通用类或方法。
class Box<T>(val value: T) {
fun getValue(): T = value
}
fun <T> printBoxValue(box: Box<T>): Unit {
println(box.getValue())
}
集合类型: Kotlin 的集合框架已经内置了对泛型的支持,这使得你可以轻松地在集合中存储和操作多种数据类型的元素。
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>
避免类型转换: 使用泛型可以减少在代码中进行显式的类型转换,从而提高代码的可读性和安全性。
fun <T> safeCast(obj: Any?): T? {
return obj as? T
}
约束和边界:
你可以使用 where
子句为泛型参数设置约束,以确保只有满足特定条件的类型才能被使用。
fun <T : Comparable<T>> findMax(list: List<T>): T {
return list.maxOrNull() ?: throw IllegalStateException("List is empty")
}
扩展函数和属性: 泛型允许你为现有类型编写扩展函数和属性,而无需修改这些类型的定义。
fun <T> Iterable<T>.printElements() {
for (element in this) {
println(element)
}
}
val list = listOf(1, 2, 3)
list.printElements() // 输出: 1 2 3
总之,Kotlin 泛型提供了一种灵活且强大的方式来处理多种数据类型,同时保持代码的简洁和可读性。