12-泛型约束
8.2.7 泛型约束
所有允许被指定类型的参数,都可以使用泛型约束来进行限制。在Kotlin中,常见的泛型约束就是上界,它对应Java的extends关键字。代码如下。
fun <T : Comparable<T>> sort(list: List<T>){
// …
}
对于上面的方法,冒号之后指定的类型就是泛型参数的上界,只有Comparable
sort(listOf(1, 2, 3)) //编译通过,Int是Comparable<Int>的子类型
sort(listOf(HashMap<Int, String>())) //编译错误,HashMap<Int, String>不是
//Comparable<HashMap<Int, String>>的子类
如果没有特别指定,则泛型约束的默认上界类型为“Any?”。同时,在定义泛型参数的尖括号中,只允许定义唯一的上界,如果同一类型参数需要指定多个上界,则可以使用单独的where条件子句。代码如下。
fun <T> cloneWhenGreater(list: List<T> , threshold: T): List<T>
where T : Comparable ,
T : Cloneable {
return list.filter{it -> threshold }.map { it.clone()}
}