当前位置:嗨网首页>书籍在线阅读

12-泛型约束

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.2.7 泛型约束

所有允许被指定类型的参数,都可以使用泛型约束来进行限制。在Kotlin中,常见的泛型约束就是上界,它对应Java的extends关键字。代码如下。

fun <T : Comparable<T>> sort(list: List<T>){
    // …
}

对于上面的方法,冒号之后指定的类型就是泛型参数的上界,只有Comparable子类型才能替换泛型参数T。代码如下。

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()} 
}