Kotlin 泛型在处理复杂类型关系时非常灵活。它们允许你创建可重用的、类型安全的代码,同时保持类型推断的便利性。以下是一些处理复杂类型关系的示例:
// 泛型类
class Box<T>(val value: T) {
fun getValue(): T {
return value
}
}
// 泛型函数
fun <T> printBoxValue(box: Box<T>, converter: (T) -> String) {
println(converter(box.getValue()))
}
fun main() {
val intBox = Box(42)
val strBox = Box("Hello, Kotlin!")
printBoxValue(intBox) { it.toString() }
printBoxValue(strBox) { it.toUpperCase() }
}
在这个例子中,我们定义了一个泛型类 Box
和一个泛型函数 printBoxValue
。Box
类可以存储任何类型的值,而 printBoxValue
函数可以接受任何类型的 Box
并对其进行处理。
// 泛型约束
fun <T> printListItems(list: List<T>, predicate: (T) -> Boolean) {
for (item in list) {
if (predicate(item)) {
println(item)
}
}
}
data class Person(val name: String, val age: Int)
fun main() {
val people = listOf(
Person("Alice", 30),
Person("Bob", 25),
Person("Charlie", 35)
)
printListItems(people) { it.age >= 30 }
}
在这个例子中,我们定义了一个泛型函数 printListItems
,它接受一个类型为 List<T>
的参数,并使用一个谓词函数 predicate
来过滤列表中的元素。这里我们使用了类型约束,但没有限制 T
的具体类型。
// 泛型类型别名
typealias PairOf<A, B> = Pair<A, B>
fun main() {
val pair = PairOf("Hello", 42)
println(pair.first) // 输出 "Hello"
println(pair.second) // 输出 42
}
在这个例子中,我们定义了一个泛型类型别名 PairOf
,它接受两个类型参数 A
和 B
,并创建一个 Pair<A, B>
类型的别名。这使得我们可以更简洁地表示类型关系。
总之,Kotlin 泛型在处理复杂类型关系时非常强大。通过使用泛型类、泛型函数、泛型约束和泛型类型别名,你可以编写可重用、类型安全的代码,同时保持类型推断的便利性。