Kotlin 泛型允許你在類、接口和方法中使用類型參數,從而提高代碼的復用性和靈活性。泛型的定義和使用主要包括以下幾個方面:
要定義一個泛型類,你需要在類名后面使用尖括號 <T>
來聲明類型參數。類型參數用大寫字母表示,通常使用 T 作為通用類型參數的名稱。
class GenericBox<T> {
private var content: T? = null
fun setContent(content: T) {
this.content = content
}
fun getContent(): T? {
return content
}
}
使用泛型類時,你需要指定具體的類型參數。如果類型參數在實例化時已知,可以直接指定類型;如果類型參數在實例化時未知,可以使用類型推斷。
fun main() {
val intBox = GenericBox<Int>() // 指定類型參數為 Int
intBox.setContent(42)
println(intBox.getContent()) // 輸出:42
val strBox = GenericBox<String>() // 指定類型參數為 String
strBox.setContent("Hello, Kotlin!")
println(strBox.getContent()) // 輸出:Hello, Kotlin!
}
要定義一個泛型接口,你需要在接口名后面使用尖括號 <T>
來聲明類型參數。接口中的方法可以使用類型參數作為參數類型或返回類型。
interface GenericComparator<T> {
fun compare(a: T, b: T): Int
}
使用泛型接口時,你需要指定具體的類型參數。如果類型參數在實現時已知,可以直接指定類型;如果類型參數在實現時未知,可以使用類型推斷。
fun main() {
val intComparator = object : GenericComparator<Int> {
override fun compare(a: Int, b: Int): Int {
return a - b
}
}
println(intComparator.compare(5, 3)) // 輸出:2
val strComparator = object : GenericComparator<String> {
override fun compare(a: String, b: String): Int {
return a.compareTo(b)
}
}
println(strComparator.compare("apple", "banana")) // 輸出:-1
}
要定義一個泛型函數,你需要在函數名后面使用尖括號 <T>
來聲明類型參數。泛型函數可以在函數體內部使用類型參數作為參數類型或返回類型。
fun <T> printList(list: List<T>) {
for (item in list) {
println(item)
}
}
使用泛型函數時,你需要指定具體的類型參數。如果類型參數在調用時已知,可以直接指定類型;如果類型參數在調用時未知,可以使用類型推斷。
fun main() {
val intList = listOf(1, 2, 3, 4, 5)
printList(intList) // 輸出:
// 1
// 2
// 3
// 4
// 5
val strList = listOf("apple", "banana", "cherry")
printList(strList) // 輸出:
// apple
// banana
// cherry
}
通過以上示例,你可以看到 Kotlin 泛型的定義和使用方法。泛型為 Kotlin 代碼提供了強大的類型安全和靈活性,使得代碼更加易于維護和擴展。