自定义泛型接口和自定义泛型类声明方式完全一样。以下是对上一章节泛型类代码的修改,配合使用泛型接口实现队列功能。
- 声明泛型接口 IQueue
interface IQueue<T> {
fun push(ele: T): Boolean
fun pop(): T?
}
- 声明类 Queue 实现泛型接口 IQueue
class Queue<T> : IQueue<T> {
private val elements: MutableList<T>
init {
elements = ArrayList<T>()
}
override fun push(ele: T): Boolean = elements.add(ele)
override fun pop(): T? = if (elements.isEmpty()) null else elements.removeAt(0)
override fun toString(): String
= if (elements.isEmpty()) "[]" else elements.run {
val stringBuilder = StringBuilder()
this.joinTo(stringBuilder, ",", "[", "]")
stringBuilder.toString()
}
}
- 验证队列 Queue 的逻辑正确性
fun main(args: Array<String>?) {
val queue1 = Queue<String>()
queue1.push("a")
queue1.push("b")
queue1.push("c")
queue1.push("d")
queue1.push("e")
// queue1.push(2) // 编译错误
println(queue1)
queue1.pop()
println(queue1)
println("-----------------------------------")
val queue2 = Queue<String>()
println(queue2)
}
网友评论