You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于ArrayList<Person>排序时Lambda参数类型推导的疑问

为什么Lambda参数a会被识别为Person类型?

核心是Java的泛型类型推断机制在起作用,一步步拆解就能明白:

  • 你的arrayListOfPersons是ArrayList<Person>,它的sort方法要求传入的参数必须是Comparator<Person>——因为这个ArrayList里存的全是Person对象,排序逻辑自然要针对Person类型。
  • 再看Comparator.comparing()的泛型方法定义:它是一个静态泛型方法,返回值是Comparator<T>,而我们需要这个返回值刚好匹配sort方法要求的Comparator<Person>,所以编译器会直接推断出这里的泛型参数T=Person。
  • 接下来,comparing方法接收的参数是一个Function<? super T, ? extends U>,这里的T已经被推断为Person,所以这个Function的输入类型就是Person(或者它的父类,但我们调用的是Person的getName()方法,所以直接确定为Person)。
  • 你的Lambda表达式a -> a.getName()作为这个Function的实现,参数a的类型自然就被锁定为Person——既满足Function的输入类型要求,又和a.getName()调用的方法匹配,编译器完全能确定a的类型。

示例代码:

arrayListOfPersons.sort(Comparator.comparing(a -> a.getName()));

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:41:32