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

Java中ArrayList倒序排序报错:无法解析getRating()方法

问题原因分析

这个问题出在Java的泛型类型推断上。当你直接使用Comparator.comparing(m->m.getRating())作为sort方法的参数时,编译器可以通过sort方法需要的Comparator<Movie>类型,反向推断出lambda表达式中的m是Movie类型,所以能正确识别getRating()方法。

但当你链式调用.reversed()时,编译器的类型推断链条被打断了:它先处理comparing(m->m.getRating())这部分,此时没有明确的目标类型提示,编译器无法确定m的具体类型(会默认推断为Object),自然就找不到getRating()方法了。

解决方法

这里有三种简单的修复方式:

方法1:使用方法引用替代lambda表达式

方法引用的类型推断比lambda更明确,编译器能直接识别出目标类型:

List<Movie> result = movieRepository.findAll();
result.sort(Comparator.comparing(Movie::getRating).reversed());

方法2:明确指定泛型参数

手动给comparing方法指定泛型类型,告诉编译器T是Movie,U是getRating()返回的类型(比如Integer):

List<Movie> result = movieRepository.findAll();
result.sort(Comparator.<Movie, Integer>comparing(m->m.getRating()).reversed());

方法3:先将Comparator存入变量

把Comparator先赋值给一个明确类型的变量,再调用reversed(),这样编译器能清晰识别类型:

List<Movie> result = movieRepository.findAll();
Comparator<Movie> ratingComparator = Comparator.comparing(m->m.getRating());
result.sort(ratingComparator.reversed());

这些方法本质上都是帮编译器明确泛型类型,让它能正确找到getRating()方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:07:29