泛型类的声明,是在类名后面添加 <T>,下面通过自定义队列示例介绍泛型类的使用。
class Queue<T> {
private val elements: MutableList<T>
init {
elements = ArrayList<T>()
}
fun push(ele: T): Boolean = elements.add(ele)
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()
}
}
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)
}
2019-06-06 17:31:28.582 4014-4014/cn.ak.kot I/System.out: [a,b,c,d,e]
2019-06-06 17:31:28.583 4014-4014/cn.ak.kot I/System.out: [b,c,d,e]
2019-06-06 17:31:28.583 4014-4014/cn.ak.kot I/System.out: -------------
2019-06-06 17:31:28.583 4014-4014/cn.ak.kot I/System.out: []
泛型类声明时也可以有多个类型参数,类似于泛型函数可以使用不同的字母声明不同的类型参数,多个类型参数直接也是使用逗号 (,) 分隔。泛型声明时也可以使用泛型约束。如下:
class Queue<T: Number> {
...
}
多个泛型参数,多个约束
class Test<T: Number, M: MutableList<M>> {
...
}
网友评论