方法引用

符号说明:
双冒号为方法引用运算符,而它所在的表达式被称为 方法引用
应用场景:如果Lambda表达式所要实现的方案,已经有其他方法存在相同的方案,那么则可以使用方
法引用。

重点:
方法引用,提供的方法一定要和函数式接口的方法是一样的入参和出参
例如:

/**
 * @author jia
 * @date 2022-08-27
 * @desc com.example
 * @since 1.0
 */
public class MethodRefrence {

    /**
     * 当这个方法和Consumer这个函数式接口中的accpt方法是一样的入参和出参时
     * 就可以直接用方法引用了
     */
    public void calcTotal(Integer[]numbers){

        Integer total = 0;

        for (int i = 0; i  consumer){

        Integer[]numbers={12,12,3,12312,3,12,312,3,12,1};

        consumer.accept(numbers);

    }
    
    public static void main(String[] args) {

        MethodRefrence methodRefrence =new MethodRefrence();

        //printlnTotal方法的参数 Consumer对象的方法正好和calcTotal是一样的出入参。就可以使用方法引用
        methodRefrence.printlnTotal(methodRefrence::calcTotal);

    }
}

常见的引用方式:

方法引用在JDK8中使用是相当灵活的,有以下几种形式:

    1. instanceName::methodName 对象::方法名
    1. ClassName::staticMethodName 类名::静态方法
    1. ClassName::methodName 类名::普通方法
    1. ClassName::new 类名::new 调用的构造器
    1. TypeName[]::new String[]::new 调用数组的构造器
  • 对象:方法名

获取当前的时间戳:
Supplier函数式接口,正好提供了一个只有返回值的get()抽象方法,而now.getTime()方法,也正好是一个只有返回值的方法。所以可以直接使用方法引用

public static void main(String[] args) {
        Date now =new Date();
         Supplier supplier =()->{  return now.getTime(); };
        
        Supplier supplierRefrence =now::getTime;
    }
  • 类名::静态方法

获取系统纳秒数:
Supplier函数式接口,正好提供了一个只有返回值的get()抽象方法,而System的静态方法nanoTime,也正好是一个只有返回值的方法。所以可以直接使用方法引用。注意:这里是直接了用了类的静态方法

public static void main(String[] args) {

        Supplier supplier = ()->{  return System.nanoTime(); };

         Supplier supplierRefrence = System::nanoTime;
    }
  • 类名::普通方法

类名::普通方法必须得是有入参的函数式接口才能用。这个类名实际上就是对于入参的一个代替。类名的实际值就是入参


image.png
  • 类名::new 调用的构造器

函数式接口必须得是有返回值的才能用。

public static void main(String[] args) {

       Supplier supplier = ()->{return new MethodRefrence();};
       
       Supplier supplierRefrence = MethodRefrence::new;
    }
  • String[]::new 调用数组的构造器

函数式接口必须得是只有一个返回值,一个入参。入参作为数组的长度

 public static void main(String[] args) {

       Function function = (len)->{return new String[len];};

       Function functionRefrence = String[]::new;
    }

你可能感兴趣的:(方法引用)