欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java8 方法引用详解

程序员文章站 2022-05-04 18:09:48
...

一、方法引用概述

(这些话理解起来非常费劲,后面会结合具体情形讲解)

1、方法引用(Method References)

     当要传递给Lambda体的操作,已经有了实现方法,可以使用方法引用。

2、方法引用可以看做是Lambda表达式的深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数是接口的一个实例。

3、要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致。

4、格式:使用操作符“::”将类(或对象)与方法名分隔开。如下三种主要是用情况:

      对象名::实现方法(非静态方法)

      类::静态方法名

      类::实例方法(非静态方法)

二、方法引用的三种情形

  • 对象名::实现方法(非静态方法)
  • 首先通过一个例子来理解一下 “当要传递给Lambda体的操作,已经有了实现方法,可以使用方法引用”这句话。

       以下代码是通过供给型接口获取student信息

class student{
    private Integer id;
    private String name;

    //常规的get,set,toString,constructor已省略
}
//利用供给型接口获取student信息
class demo{
    public static void main(String[] args) {
        student stu = new student(1, "李四");
        Supplier<String> spl = ()->stu.getName();
        System.out.println(spl.get());
    }
}

java8 方法引用详解

下面采用方法引用来实现

java8 方法引用详解

  • 类::静态方法名
  • 以下例子利用Comparator接口实现比较两个整型数据的大小

       java8 方法引用详解

  • 类::实例方法(非静态方法)
  • 以下例子BiPredicate接口比较两个字符串

       java8 方法引用详解

       但是,类::实例方法(非静态方法)这种情形下,需要有前提

       前提:方法的第一个参数(这里即为x)是被调用方法(这里指equals())的调用者;方法的第二个参数(这里指y)是被调用方法的参数.