问个问题。

来源:4-1 方法引用

马什么梅

2020-04-17 17:20

http://img.mukewang.com/5e99736800017f4112250298.jpghttp://img3.mukewang.com/5e9973a60001522306770381.jpg


//3.静态方法引用
Collections.sort(userList,User::compareByAge);
System.out.println(userList);


可以看到Collections.sort()第二个参数接收的是一个Comparator类型的对象。

这里为什么可以传入 User::compareByAge ?

User又没有实现Comparator接口,程序如何能确定我们再User里定义的compareByAge是Comparator接口的排序方法实现 ?

写回答 关注

1回答

  • 大牧莫邪
    2020-04-18 12:33:38
    已采纳

    传入参数会自动进行类型检查,对传入输入进行对应方法调用,如果调用了对应的方法但是参数、返回值等出现不一致情况会检查出错吖;你想想如果我们自己设计类似的流程,是不是也会这样去考虑呢

    马什么梅

    我明白了。 意思就是User::compareByAge实现了Comparator<T>的int compare(T o1, T o2); 虚拟机做类型检查,通过就可以调用自定义的排序实现方法compareByAge()了。 看不到明确定义的implements XX,也看不到@Override,都是虚拟机在做判断,这样好抽象啊。

    2020-04-19 00:02:36

    共 1 条回复 >

一课掌握Lambda表达式语法及应用

深入浅出,快速掌握Lambda表达式“如何用”“怎么用”

6618 学习 · 58 问题

查看课程

相似问题