为什么Kotlin中的泛型排序不编译?
为什么它不能编译?它告诉您在为什么Kotlin中的泛型排序不编译?,kotlin,Kotlin,为什么它不能编译?它告诉您在列表中有一些错误。sortBy fun <T, R : Comparable<R>> Iterable<T>.sortBy(vararg selectors: (T) -> R): List<T> { return this.sortedWith(compareBy(*selectors)) } fun main() { class Person(val name: String, val age: In
列表中有一些错误。sortBy
fun <T, R : Comparable<R>> Iterable<T>.sortBy(vararg selectors: (T) -> R): List<T> {
return this.sortedWith(compareBy(*selectors))
}
fun main() {
class Person(val name: String, val age: Int)
val list = listOf(Person("Alex", 20))
val sorted = list.sortBy({ it.name }, { it.age })
println(sorted)
}
funiterable.sortBy(vararg选择器:(T)->R):列表{
返回此.sortedWith(compareBy(*选择器))
}
主要内容(){
类人员(val名称:字符串,val年龄:Int)
val list=listOf(个人(“Alex”,20))
val sorted=list.sortBy({it.name},{it.age})
println(已排序)
}
错误
Type parameter bound for R in
fun <T, R : Comparable<R>> Iterable<T>.sortBy
(
vararg selectors: (T) → R
)
: List<T>
is not satisfied: inferred type Any is not a subtype of Comparable<Any>
中为R绑定的类型参数
有趣的,卑鄙的
(
vararg选择器:(T)→ R
)
:列表
不满足:推断类型Any不是Compariable的子类型
当它试图从第一个lambda推断出类型R
时,它是一个可比的
。第二个lambda返回一个Int
或Comparable
,它不是Comparable
,因此失败
您可以对Compariable
类型使用星形投影,因为它们是否匹配并不重要
fun <T> Iterable<T>.sortBy(vararg selectors: (T) -> Comparable<*>): List<T> {
return this.sortedWith(compareBy(*selectors))
}
funiterable.sortBy(vararg选择器:(T)->compariable):列表{
返回此.sortedWith(compareBy(*选择器))
}
当它试图从第一个lambda推断出类型R
时,它是一个可比的
。第二个lambda返回一个Int
或Comparable
,它不是Comparable
,因此失败
您可以对Compariable
类型使用星形投影,因为它们是否匹配并不重要
fun <T> Iterable<T>.sortBy(vararg selectors: (T) -> Comparable<*>): List<T> {
return this.sortedWith(compareBy(*selectors))
}
funiterable.sortBy(vararg选择器:(T)->compariable):列表{
返回此.sortedWith(compareBy(*选择器))
}
始终发布错误消息。它通常是最重要的拼图。@Thomas谢谢,更新并添加了错误消息。始终发布错误消息。它通常是最重要的拼图。@Thomas谢谢,更新,添加了错误消息。