kotlin
2023-02-03
2023-02-03
善气迎人,亲如兄弟;恶气迎人,害于戈兵。——管子
java
中,我们可以使用<T extends Comparable<? super T>, Serializable>
来指定多个接口的泛型限制
kotlin
中 对应的是上界
上界
最常见的约束类型是与 Java 的 extends 关键字对应的 上界:
1 fun <T : Comparable<T>> sort(list: List<T>) { …… }冒号之后指定的类型是上界:只有
Comparable<T>
的子类型可以替代T
。 例如:
1
2 sort(listOf(1, 2, 3)) // OK。Int 是 Comparable<Int> 的子类型
sort(listOf(HashMap<Int, String>())) // 错误:HashMap<Int, String> 不是 Comparable<HashMap<Int, String>> 的子类型默认的上界(如果没有声明)是
Any?
。在尖括号中只能指定一个上界。 如果同一类型参数需要多个上界,我们需要一个单独的 where-子句:
1
2
3
4
5 fun <T> copyWhenGreater(list: List<T>, threshold: T): List<String>
where T : CharSequence,
T : Comparable<T> {
return list.filter { it > threshold }.map { it.toString() }
}所传递的类型必须同时满足
where
子句的所有条件。在上述示例中,类型T
必须既实现了CharSequence
也实现了Comparable
。
换言之,我们上面的<T extends Comparable<? super T>, Serializable>
使用kotlin
则应该:
1 |
|