Generics 成员引用不适用于Kotlin不可变列表中的maxBy

Generics 成员引用不适用于Kotlin不可变列表中的maxBy,generics,kotlin,lambda,Generics,Kotlin,Lambda,以下是我的代码,它不起作用: val people = listOf(Person("Tarun", 28), Person("Shyam", 25), Person("Pushpraj", 27)) people.maxBy { Person::age } 获取上述代码时出现的错误: 在inline fun Iterable.maxBy(选择器:(T)->R):T中为R绑定的类型参数? 不满足:推断类型KProperty1不是可比较的子类型 工作代码: val peo

以下是我的代码,它不起作用:

    val people = listOf(Person("Tarun", 28), Person("Shyam", 25), Person("Pushpraj", 27))
    people.maxBy { Person::age }
获取上述代码时出现的错误:

在inline fun Iterable.maxBy(选择器:(T)->R):T中为R绑定的类型参数?
不满足:推断类型KProperty1不是可比较的子类型

工作代码:

    val people = listOf(Person("Tarun", 28), Person("Shyam", 25), Person("Pushpraj", 27))
    people.maxBy { it.age }
无法理解此处的问题。

TL;博士
people.maxBy(Person::age)
可以工作(注意括号)

方法签名 maxBy函数具有以下签名:

public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {
public-inlinefuniterable.maxBy(选择器:(T)->R):T?{
如果您编写
people.maxBy{Person::age}
,则可以将其编写为
people.maxBy({Person::age})
,这意味着您传递了一个lambda,该lambda返回另一个lambda(供应商),该lambda返回整数年龄

换句话说:您在其他lambda中传递(java供应商)lambda,而不是实际的(java供应商)lambda。这看起来很混乱,因为如果方法中的最后一个参数是lambda,您可以删除Kotlin中的普通括号。

TL;DR
people.maxBy(Person::age)
可以工作(注意括号)

方法签名 maxBy函数具有以下签名:

public inline fun <T, R : Comparable<R>> Iterable<T>.maxBy(selector: (T) -> R): T? {
public-inlinefuniterable.maxBy(选择器:(T)->R):T{
如果您编写
people.maxBy{Person::age}
,则可以将其编写为
people.maxBy({Person::age})
,这意味着您传递了一个lambda,该lambda返回另一个lambda(供应商),该lambda返回整数年龄

换句话说:在其他lambda中传递(java供应商)lambda,而不是实际的(java供应商)lambda。这看起来很混乱,因为如果方法中的最后一个参数是lambda,则可以删除Kotlin中的普通括号