JDK8新特性 方法引用

1. Lambda的冗余场景

JDK8新特性 方法引用_第1张图片
image.png

首先可以直接调用getSum方法就可以完成这个操作了。


JDK8新特性 方法引用_第2张图片
image.png

而方法引用更简洁


JDK8新特性 方法引用_第3张图片
image.png

其实方法引用就是让这个指定的方法去重写接口的抽象方法,到时候调用接口的抽象方法,就是去调用传递过去的这个方法。

如果lambda所要实现的方案,已经有其他方法存在相同方案,那么就可以使用方法引用

2. 常见引用方式

  1. instanceName::methodName 对象::方法名
  2. ClassName::staticMethodName 类名::静态方法
  3. ClassName::methodName 类名::普通方法
  4. ClassName::new 类名::new调用的构造器
  5. TypeName[]::new 调用某种数据格式的构造器
Function f = (String str) -> {
    return str.length();  
};
--------------上面和下面两种写法是等价的!-------------------------
Function f = String::length;

======================================================================
    
// 前面两个泛型是参数的类型,第三个泛型是返回值的类型
BiFunction f = (String str, Integer index) -> {
    return str.substring(index);  
};
--------------上面和下面两种写法是等价的!-------------------------
BiFunction f = String::substring;

方法引用的两个注意事项:

• 被引用的方法,参数要和接口中抽象方法的参数一样,
如Supplier s = now::getTime,now.getTime()没有参数,
Supplier接口的抽象方法get()也没有参数
• 当接口抽象方法有返回值时,被引用的方法也必须有返回值

你可能感兴趣的:(JDK8新特性 方法引用)