Java方法引用详解(4大作用分类及示例)

Java方法引用详解(4大作用分类及示例)-mikechen

Java方法引用简介

Java8 引入了方法引用特性,Java方法引用使用一对冒号 “::”,用来直接访问类或者实例的已经存在的方法或者构造方法。

比如:System.out::println 就是方法引用,表示调用 System.out 的 println 方法。

简单来说,方法引用本身就是一个 Lambda 表达式,它是一种更加简洁、易读的 Lambda 表达式,通过双冒号 :: 来引用目标方法。

 

Java方法引用作用

  1. 使用它可以简化 Lambda 表达式;
  2. Java方法引用可以使语言的构造更紧凑简洁;
  3. Java方法引用可以减少冗余代码;

 

Java方法引用分类

方法引用有如下几4种分类,如下图所示:

Java方法引用详解(4大作用分类及示例)-mikechen

下面我们在 DataInfo 类中定义了 4 个方法,作为例子来区分 Java 中 4 种不同方法的引用。

如下所示:

class DataInfo{
    private String name;

    private String info;

    private String welcome;

    public static DataInfo create( Supplier<DataInfo> supplier) {
        return supplier.get();
    }

    public static void getDataInfo( DataInfo dataInfo) {
        System.out.println("DataInfo : " + dataInfo.toString());
    }

    public void getWebNameinfo( DataInfo dataInfo) {
        System.out.println(" WebName " + dataInfo.getName());
    }

    public void getWelcomeInfo() {
        System.out.println("welcome " + this.toString());
    }
}

 

1.静态方法引用

静态方法引用:它的语法是

类名::静态方法名

示例如下:

dataInfoList.forEach(DataInfo::getDataInfo);

 

2.实例方法引用

实例方法引用:它的语法是

实例::实例方法名

示例如下:

dataInfoList.forEach( DataInfo.create( DataInfo::new )::getWebNameinfo );

 

3.对象方法引用

对象方法引用:它的语法是

类名::对象方法名

示例如下:

dataInfoList.forEach(DataInfo::getWelcomeInfo);

 

4.构建方法引用

构建方法引用:它的语法是

类名::new

示例如下:

DataInfo dataInfo = DataInfo.create(DataInfo::new);

 

Java方法引用示例

import java.util.List;
import java.util.ArrayList;
 
public class Java8Tester {
   public static void main(String args[]){
      List<String> names = new ArrayList();
        
      names.add("taobao");
      names.add("mikechen");
      names.add("baidu");
      names.forEach(System.out::println);
   }
}

运行结果为:

taobao
mikechen
baidu

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法