kotlin: 泛型一
一,功能
通常情况下 , 泛型参数 都使用 T 表示 ,
使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成 都使用 T 来表示泛型
函数 的 参数 或 返回值 类型为 泛型类型 , 则该函数称为 泛型函数
泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是泛型 的话 ,
在该泛型函数 中可能需要使用多个泛型 , 使用不同的字母表示不同的泛型 ;
如果函数中 引入了新的泛型类型 , 需要在 fun 关键字 和 函数名 之间 , 使用 尖括号 <T> 注明 ;
二,例子: 泛型类和泛型函数
代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
// 泛型类
class Box<T>(var content: T) {
fun get(): T = content
fun set(value: T) {
content = value
}
}
// 泛型函数
fun <T> printItem(item: T) {
println("接收到的参数item: $item")
}
// 使用泛型
val stringBox = Box("Hello")
val intBox = Box(42)
println(stringBox.get()) // Hello
println(intBox.get()) // 42
printItem("Kotlin") // Item: Kotlin
printItem(100) // Item: 100
}
运行结果:

三,例子:多个泛型参数
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
// 多个类型参数
class Pair<T, U>(val first: T, val second: U) {
fun swap(): Pair<U, T> = Pair(second, first)
override fun toString(): String = "($first, $second)"
}
// 使用多个类型参数
val pair = Pair("Hello", 42)
println("原数据:"+pair) // (Hello, 42)
val swapped = pair.swap()
println("交换后:"+swapped) // (42, Hello)
// 不同类型参数
val mixedPair = Pair("字符串", true)
println("不同类型参数1:"+mixedPair) // (String, true)
// 不同类型参数
val mixedPair2 = Pair(false,"字符串")
println("不同类型参数2:"+mixedPair2) // (String, true)
}
运行结果:

四,例子: 泛型函数
代码:
//处理按钮点击事件:
binding.button3.setOnClickListener {
// 泛型函数
fun <T> createList(vararg items: T): List<T> {
return items.toList()
}
//lambda表达式参数使用泛型
fun <T> findFirst(list: List<T>, predicate: (T) -> Boolean): T? {
for (item in list) {
if (predicate(item)) {
return item
}
}
return null
}
// 使用泛型函数
val stringList = createList("a", "b", "c")
val intList = createList(1, 2, 3, 4, 5)
println(stringList) // [a, b, c]
println(intList) // [1, 2, 3, 4, 5]
val firstEven = findFirst(intList) { it % 2 == 0 }
println("第一个偶数: $firstEven") // 第一个偶数: 2
}
运行结果:

浙公网安备 33010602011771号