为什么这两个方法参数不一样,还能方法引入?
Java方法引用
类型 | 方法引用 | Lambda表达式 |
---|---|---|
静态方法引用 | Class::staticMethod | (args) -> Class.staticMethod(args) |
实例方法引用 | inst::instMethod | (args) -> inst.instMethod(args) |
对象方法引用 | Class::instMethod | (inst,args) -> inst.instMethod(args) |
构造方法引用 | Class::new | (args) -> new Class(args) |
这段代码中的“Users::getAge”适用于第三种情况“Class::instMethod”,方法的第一个参数就是对象实例。
也就是说
Users::getAge 对应的lambda表达式是 "(u Users) -> u.getAge()"
27 回答12.8k 阅读
3 回答2.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
6 回答1.1k 阅读✓ 已解决
8 回答2.9k 阅读
4 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
一步一步简化,最后用方法引用表示只有一个方法调用的labmda表达式
getAge()
其实可以视为两个方法:Integer getAge()
,对应Supplier<Integer>
,方法引用是Users:getAge
Integer getAge(Users this)
,对应Function<Users, Integer>
,方法引用也是Users::getAge
,符合comparing
的参数类型,于是可以用了