java8 方法引用详解

一、方法引用概述

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

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());
    }
}

下面采用方法引用来实现

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

       

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

       

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

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

发布了28 篇原创文章 · 获赞 5 · 访问量 1172

猜你喜欢

转载自blog.csdn.net/weixin_40391011/article/details/104042322
今日推荐