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

【2023】Kotlin教程

在这里插入图片描述

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

第14章 泛型

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

14.4 泛型接口

不仅可以自定义泛型类还可以自定义泛型接口,泛型接口与泛型类声明的方式完全一样。下面将我们之前的泛型类示例修改称为队列接口,代码如下:

package com.dingjiaxiong

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

    /**
     * 入队函数
     * @param item 需要入队的元素
     */
    fun queue(item: T)

    /**
     * 出队函数
     * @return 返回出队元素
     */
    fun dequeue(): T?

}

接口中的方法不需要实现

实现接口IQueue<T>具体方式有很多,可以是List(列表结构)、Set(集结构)或Hash(散列结构)等多种不同方式,下面笔者给出一个基于List实现方式,代码如下:

package com.dingjiaxiong

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

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

    // init代码块初始化集合items
    init {
    
    
        this.items = ArrayList()
    }

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

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

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

}

调用实现代码

package com.dingjiaxiong

fun main() {
    
    

    val genericQueue = ListQueue<String>()

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

    println(genericQueue)
    genericQueue.dequeue()

    println(genericQueue)

}

在这里插入图片描述

需要注意的实现泛型接口的具体类也应该支持泛型,所以Queue<T>中类型参数名要与IQueue<T>接口中的类型参数名一致。

猜你喜欢

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