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 泛型在處理復雜類型關系時非常強大。通過使用泛型類、泛型函數、泛型約束和泛型類型別名,你可以編寫可重用、類型安全的代碼,同時保持類型推斷的便利性。