Java8 Lamda方法引用和构造引用原理

所属分类: 软件编程 / java 阅读数: 41
收藏 0 赞 0 分享

一方法引用概述

方法引用是特定Lamda表达式的一种简写,其思路就是能替换Lamda表达式就直接调用函数使用方法名。

其语法格式:类名 :: 方法名。

二3种方法引用

1 指向静态方法的引用

语法格式: 静态类名(ClassName)::方法名(MethodName)
示例:

  // 1 Lamda静态方法
  @Test
  public void LamdaSTest(){
    String youku1327 = "1327";
    Function function = s -> ObjectUtils.allNotNull(youku1327);
    System.out.println(function.apply(youku1327));// true

  }
  // 静态方法引用
  @Test
  public void MethodRefTest(){
    String youku1327 = "youku1327";
    Function function = ObjectUtils::allNotNull;
    System.out.println(function.apply(youku1327));// true
  }

2 指向对象实例的方法的引用

语法格式:实例名称(instanceName)::方法名称(MethodName)

这个对象指的是非入参的外部对象

示例:

  // 2 Lamda表达式
  @Test
  public void ObjectLamdaTest(){
    Car car = new Car("100", "black", "中国", 20);
    Supplier supplier = ()-> car.getColor();
    System.out.println(supplier.get());//black
  }
  // 对象引用
  @Test
  public void ObjectRefTest(){
    Car car = new Car("100", "black", "中国", 20);
    Supplier<String> supplier = car::getColor;
    System.out.println(supplier.get());//black
  }

3 指向实例的方法引用

语法格式:对象名称(ClassName)::方法名称(Method)

这个对象指的是入参对象

  //3 Lamda表达式
  @Test
  public void InstanceMethodLamdaTest(){
    Car car = new Car("100", "black", "中国", 20);
    Function<Car,String> function = s -> s.getColor();
    System.out.println(function.apply(car));//black
  }

  @Test
  public void InstanceMethodRefTest(){
    Car car = new Car("100", "black", "中国", 20);
    Function<Car,String> function = Car::getColor;
    System.out.println(function.apply(car));//black
  }

三构造器引用

语法格式:对象名称(ClassName)::new

  @Test
  public void constructLamdaTest(){
    BiFunction<String,Double,Car> biFunction = (s, aDouble) -> new Car(s,aDouble);
    Car car = biFunction.apply("youku1327", 50.0);
    // Car(code=youku1327, color=null, factory=null, price=50.0)
    System.out.println(car);
  }

  @Test
  public void construcMethodRefTest(){
    BiFunction<String,Double,Car> biFunction = Car::new;
    Car car = biFunction.apply("youku1327", 50.0);
    // Car(code=youku1327, color=null, factory=null, price=50.0)
    System.out.println(car);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

利用MultipartFile实现文件上传功能

这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java编程实现NBA赛事接口调用实例代码

这篇文章主要介绍了Java编程实现NBA赛事接口调用实例代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java编程之双重循环打印图形

这篇文章主要介绍了Java编程之双重循环打印图形,属于Java编程基础练习部分,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

java基础学习JVM中GC的算法

这篇文章主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。
收藏 0 赞 0 分享

Java编程Post数据请求和接收代码详解

这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Retrofit+Rxjava实现文件上传和下载功能

这篇文章主要介绍了Retrofit+Rxjava实现文件上传和下载功能,文中提到了单文件上传和多文件上传及相关参数的请求,需要的朋友参考下吧
收藏 0 赞 0 分享

Retrofit+Rxjava下载文件进度的实现

这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java检查服务器的连通两种方法代码分享

这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java/Android 获取网络重定向文件的真实URL的示例代码

本篇文章主要介绍了Java/Android 获取网络重定向文件的真实URL的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java并发编程之同步器代码示例

这篇文章主要介绍了java并发编程之同步器代码示例,分享了相关代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享
查看更多