【2023】Kotlin教程 第二篇 面向对象与函数式编程 第14章 泛型 14.3 泛型类

【2023】Kotlin教程

在这里插入图片描述

第二篇 面向对象与函数式编程

第14章 泛型

使用泛型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型特性对Kotlin影响最大是在集合中使用泛型。

14.3 泛型类

根据自己的需要也可以自定义泛型类和泛型接口。下面通过一个示例介绍一下泛型类。数据结构中有一种“队列”(queue)数据结构,

在这里插入图片描述

它的特点是遵守“先入先出”(FIFO)规则。

通过自定义队列集合实现泛型类。具体实现代码如下:

package com.dingjiaxiong

/**
 * 自定义的泛型队列集合
 */
class Queue<T> {
    
    

    // 声明保存队列元素集合items
    private val items: MutableList<T>

    // init 初始化代码, 实例化集合items
    init {
    
    
        this.items = ArrayList<T>()
    }

    /**
     * 入队函数
     * @param item 需要入队的元素
     */
    fun queue(item: T) {
    
    
        this.items.add(item)
    }

    /**
     * 出队函数
     * @return 返回出队元素
     */
    fun dequeue(): T? {
    
    
        return if (items.isEmpty()) {
    
    
            null
        } else {
    
    
            this.items.removeAt(0)
        }
    }

    override fun toString(): String {
    
    
        return items.toString()
    }

}

以上代码声明了Queue<T> 泛型类型的队列,<T> 是声明类型参数。

声明了一个MutableListi泛型集合成员属性items,MutableList是可变数组接口,用来保存队列中的元素。init初始化代码,实例化ArrayList对象赋值给items属性。

调用队列的示例代码:

package com.dingjiaxiong

fun main() {
    
    

    val genericQueue = Queue<String>()

    genericQueue.queue("A")
    genericQueue.queue("C")
    genericQueue.queue("B")
    genericQueue.queue("D")
//    genericQueue.queue(1) // 编译错误

    println(genericQueue)
    genericQueue.dequeue()

    println(genericQueue)

}

在这里插入图片描述

运行的结果可见,出队后第一个元素"A",会从中队列中删除。

在声明泛型类时也可以有多个类型参数,类以于泛型函数可以使用多个不同的字母声明不同的类型参数。另外,在泛型类中也可以使用泛型约束,如下代码所示:

class Queue <T Number> {...}

猜你喜欢

转载自blog.csdn.net/weixin_44226181/article/details/130038075