Kotlin 泛型在處理復(fù)雜類(lèi)型關(guān)系時(shí)非常靈活。它們?cè)试S你創(chuàng)建可重用的、類(lèi)型安全的代碼,同時(shí)保持類(lèi)型推斷的便利性。以下是一些處理復(fù)雜類(lèi)型關(guān)系的示例:
// 泛型類(lèi)
class Box<T>(val value: T) {
fun getValue(): T {
return value
}
}
// 泛型函數(shù)
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() }
}
在這個(gè)例子中,我們定義了一個(gè)泛型類(lèi) Box
和一個(gè)泛型函數(shù) printBoxValue
。Box
類(lèi)可以存儲(chǔ)任何類(lèi)型的值,而 printBoxValue
函數(shù)可以接受任何類(lèi)型的 Box
并對(duì)其進(jìn)行處理。
// 泛型約束
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 }
}
在這個(gè)例子中,我們定義了一個(gè)泛型函數(shù) printListItems
,它接受一個(gè)類(lèi)型為 List<T>
的參數(shù),并使用一個(gè)謂詞函數(shù) predicate
來(lái)過(guò)濾列表中的元素。這里我們使用了類(lèi)型約束,但沒(méi)有限制 T
的具體類(lèi)型。
// 泛型類(lèi)型別名
typealias PairOf<A, B> = Pair<A, B>
fun main() {
val pair = PairOf("Hello", 42)
println(pair.first) // 輸出 "Hello"
println(pair.second) // 輸出 42
}
在這個(gè)例子中,我們定義了一個(gè)泛型類(lèi)型別名 PairOf
,它接受兩個(gè)類(lèi)型參數(shù) A
和 B
,并創(chuàng)建一個(gè) Pair<A, B>
類(lèi)型的別名。這使得我們可以更簡(jiǎn)潔地表示類(lèi)型關(guān)系。
總之,Kotlin 泛型在處理復(fù)雜類(lèi)型關(guān)系時(shí)非常強(qiáng)大。通過(guò)使用泛型類(lèi)、泛型函數(shù)、泛型約束和泛型類(lèi)型別名,你可以編寫(xiě)可重用、類(lèi)型安全的代碼,同時(shí)保持類(lèi)型推斷的便利性。