Kotlin 泛型基础

沉默的旋律 2024-08-14 ⋅ 17 阅读

什么是泛型?

泛型是一种定义函数或类时参数类型未指定的特性。通过使用泛型,我们可以编写可复用、类型安全的代码。Kotlin 支持泛型类、泛型接口和泛型函数。

定义泛型类和接口

我们可以使用 class 关键字定义一个泛型类,同时在类名后面使用 <T> 来指定参数类型。例如:

class Box<T>(val item: T) {
    fun getItem(): T {
        return item
    }
}

在上述例子中,我们定义了一个 Box 类,使用 T 作为参数类型。item 属性类型和 getItem() 函数的返回类型都是 T

类似地,我们也可以使用 interface 关键字定义一个泛型接口:

interface List<T> {
    fun getItem(position: Int): T
    fun addItem(item: T)
}

在上述例子中,泛型接口 List 有一个泛型函数 getItem()addItem()

使用泛型类和接口

当我们实例化一个泛型类时,可以使用 <T> 参数来指定具体的类型。例如:

val box: Box<String> = Box("Hello, Kotlin")
val item: String = box.getItem()

在上述例子中,我们实例化了一个 Box 类,指定了参数类型为 String。通过 box.getItem() 我们可以获得 item 属性的值。

同样地,在实现泛型接口时,我们也可以指定具体的类型。例如:

class ArrayList<T> : List<T> {
    private val items: MutableList<T> = mutableListOf()

    override fun getItem(position: Int): T {
        return items[position]
    }

    override fun addItem(item: T) {
        items.add(item)
    }
}

在上述例子中,我们实现了一个泛型接口 List,并使用 ArrayList<T> 指定参数类型。

泛型函数

除了可以定义泛型类和泛型接口,Kotlin 还支持泛型函数。在函数名前面使用 <T> 来指定参数类型。例如:

fun <T> printItem(item: T) {
    println(item)
}

在上述例子中,我们定义了一个泛型函数 printItem(),指定参数类型为 T,并打印出参数值。

类型边界

Kotlin 允许我们指定泛型的类型边界,以约束泛型参数的类型。类型边界可以是类名、接口名或其他泛型类。例如:

fun <T : Number> isEven(num: T): Boolean {
    return num.toInt() % 2 == 0
}

在上述例子中,我们使用 <T : Number> 来指定泛型参数的类型必须是 Number 或其子类。然后我们可以在函数内部使用 toInt() 方法获取整数值,并判断是否为偶数。

总结

本文简单介绍了 Kotlin 的泛型基础知识,包括泛型类、泛型接口和泛型函数的定义与使用。泛型可以让我们编写更加灵活和可复用的代码,同时又保证了类型的安全性。在实际开发中,充分利用泛型可以提高代码的可读性和可维护性。


全部评论: 0

    我有话说: