1. Lambda的冗余场景
首先可以直接调用getSum方法就可以完成这个操作了。
而方法引用更简洁
其实方法引用就是让这个指定的方法去重写接口的抽象方法,到时候调用接口的抽象方法,就是去调用传递过去的这个方法。
如果lambda所要实现的方案,已经有其他方法存在相同方案,那么就可以使用方法引用
2. 常见引用方式
- instanceName::methodName 对象::方法名
- ClassName::staticMethodName 类名::静态方法
- ClassName::methodName 类名::普通方法
- ClassName::new 类名::new调用的构造器
- TypeName[]::new 调用某种数据格式的构造器
Function<String, Integer> f = (String str) -> {
return str.length();
};
--------------上面和下面两种写法是等价的!-------------------------
Function<String, Integer> f = String::length;
======================================================================
// 前面两个泛型是参数的类型,第三个泛型是返回值的类型
BiFunction<String, Integer, String> f = (String str, Integer index) -> {
return str.substring(index);
};
--------------上面和下面两种写法是等价的!-------------------------
BiFunction<String, Integer, String> f = String::substring;
方法引用的两个注意事项:
• 被引用的方法,参数要和接口中抽象方法的参数一样,
如Supplier<Long> s = now::getTime,now.getTime()没有参数,
Supplier接口的抽象方法get()也没有参数
• 当接口抽象方法有返回值时,被引用的方法也必须有返回值