美文网首页
方法引用

方法引用

作者: flyjar | 来源:发表于2022-08-27 09:49 被阅读0次

符号说明:
双冒号为方法引用运算符,而它所在的表达式被称为 方法引用
应用场景:如果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 <numbers.length ; i++) {

            total+=numbers[i];

        }

        System.out.println(total);
    }


    /**
     * 调用consumer具体的实现
     */
    public  void printlnTotal(Consumer<Integer[]> 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<Long> supplier =()->{  return now.getTime(); };
        
        Supplier<Long> supplierRefrence =now::getTime;
    }
  • 类名::静态方法

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

public static void main(String[] args) {

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

         Supplier<Long> 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<Integer, String[]> function = (len)->{return new String[len];};

       Function<Integer, String[]> functionRefrence = String[]::new;
    }

相关文章

  • 2020-07-04【方法引用】

    体验方法引用 方法引用符 引用方式

  • Java8——方法引用和构造器引用

    方法引用和构造器引用 方法引用 若Lambda体中的内容已经有方法实现过了,我们可以使用方法引用(方法引用是Lam...

  • 双冒号方法引用

    类别使用形式静态方法引用类名 :: 静态方法名实例方法引用对象名(引用名) :: 实例方法名类方法引用类名 :: ...

  • Java中的双冒号::是什么玩意?有这个语法?

    简洁 方法引用 Optional 可选值 一:简洁 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用...

  • 3.Java8新特性 - 方法引用与构造器

    一.方法的引用 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的...

  • jdk8 方法引用

    方法引用 方法引用可看作一个“函数指针” function pointer 方法引用分为4类 1,类名::静态方法...

  • 方法引用

    1.什么是方法引用 方法引用是java8中特定情况下简化lambada表达式的一种语法糖,这里的特定情况是指当调用...

  • 方法引用

    方法引用(Method References) 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!...

  • 方法引用

    1.1 方法引用体验 方法引用出现的原因 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案...

  • 方法引用

    lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数 lambda表达式被对象的实例方法替...

网友评论

      本文标题:方法引用

      本文链接:https://www.haomeiwen.com/subject/xsyagrtx.html