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

一方法引用概述

方法引用是特定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);
  }

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

(0)

相关推荐

  • 深入理解Java中的构造函数引用和方法引用

    JDK 8 见证了一个特殊特性的出现:构造函数引用和方法引用.在本文中, Adrian D. Finlay 探讨了开发人员如何释放构造函数引用的真正潜力. 方法引用的一些背景 如果你还不知道 Java 构造函数本身就是特殊的方法,那么阅读方法引用的基本示例将对读者有所帮助,通过了解这些内容,可以了解构造函数引用是什么. 「方法引用为已经有名称的方法提供易读的 lambda 表达式.」 「它们提供了一种无需执行就可以引用方法的简单方式.」 以上引自<Java 8 编程参考官方教程(第 9 版)>

  • Java方法参数是引用调用还是值调用?

    方法调用(call by) 是一个标准的计算机科学术语.方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) .江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用.这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传递仍然是值调用 . 我们首先用一段代码来证实一下为什么Java的对象参数传递是值调用. public class

  • Java Lambda表达式的方法引用和构造器引用实例分析

    本文实例讲述了Java Lambda表达式的方法引用和构造器引用.分享给大家供大家参考,具体如下: 一 点睛 如果Lambda表达式的代码块只有一条代码,还可以在代码块中使用方法引用和构造器引用,以使得Lambda表达式更加简洁. 种类 示例 说明 对应的Lambda表达式 引用类方法 类名::类方法 函数式接口中被实现方法的全部参数传给该类方法作为参数. (a,b,...) -> 类名.类方法(a,b, ...) 引用特定对象的实例方法 特定对象::实例方法 函数式接口中被实现方法的全部参数传

  • java引用jpython的方法示例

    本文实例讲述了java引用jpython的方法.分享给大家供大家参考,具体如下: import java.util.ArrayList; import java.util.List; import org.python.core.PyException; import org.python.core.PyInteger; import org.python.core.PyObject; import org.python.util.PythonInterpreter; public class

  • Java在制作jar包时引用第三方jar包的方法

    我用的是Eclipse打包,但在CMD窗口执行的时候报"ActiveMQ.jar中没有主清单属性"错误. 在网上搜了下,这个与MANIFEST.MF文件有关,该文件没有定义MAIN方法所在类的路径,利用好压打开jar包,果然如此.里面只有一行 Manifest-Version: 1.0 需添加Main-Class.在本例中,添加如下: Main-Class: com.luoluo.TestUse.activemq.ActiveMQStateMain 上面,有几点需要注意: 1. Mai

  • Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    接口的灵活性就在于"规定一个类必须做什么,而不管你如何做". 我们可以定义一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法,这和上述的超类对象引用访问子类对象的机制相似. //定义接口InterA interface InterA { void fun(); } //实现接口InterA的类B class B implements InterA { public void fun() { System.out.pri

  • Java函数式编程(八):字符串及方法引用

    第三章 字符串,比较器和过滤器 JDK引入的一些方法对写出函数式风格的代码很有帮助.JDK库里的一些的类和接口我们已经用得非常熟悉了,比如说String,为了摆脱以前习惯的那种老的风格,我们得主动寻找机会来使用这些新的方法.同样,当我们需要用到只有一个方法的匿名内部类时,我们现在可以用lambda表达式来替换它了,不用再像原来那样写的那么繁琐了. 本章我们会使用lambda表达式和方法引用来遍历字符串,实现Comparator接口,查看目录中的文件,监视文件及目录的变更.上一章中介绍的一些方法还

  • 解读ASP.NET 5 & MVC6系列教程(12):基于Lamda表达式的强类型Routing实现

    前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将讲述一种基于Lambda表达式的强类型类型. 这种方式的基本使用示例如下: services.Configure<MvcOptions>(opt => { opt.EnableTypedRouting(); opt.GetRoute("homepage", c =>

  • Java8方法引用和构造引用代码实例

    这篇文章主要介绍了java8方法引用和构造引用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一方法引用概述 方法引用是特定Lamda表达式的一种简写,其思路就是能替换Lamda表达式就直接调用函数使用方法名. 其语法格式:类名 :: 方法名. 二3种方法引用 1 指向静态方法的引用 语法格式: 静态类名(ClassName)::方法名(MethodName) 示例: // 1 Lamda静态方法 @Test public void L

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

    一方法引用概述 方法引用是特定Lamda表达式的一种简写,其思路就是能替换Lamda表达式就直接调用函数使用方法名. 其语法格式:类名 :: 方法名. 二3种方法引用 1 指向静态方法的引用 语法格式: 静态类名(ClassName)::方法名(MethodName) 示例: // 1 Lamda静态方法 @Test public void LamdaSTest(){ String youku1327 = "1327"; Function function = s -> Obje

  • Java8方法引用及构造方法引用原理实例解析

    如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言Java也可以写出优雅的函数式调用,学习的过程并不复杂,当你学会了Java8中函数式编程的新特性,你一定会对他爱不释手的.下面介绍一下基于Lambda表达式简写的两种引用.避免再次看到这种代码时的尴尬

  • 30分钟入门Java8之方法引用学习

    前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method References). 在学习lambda表达式之后,我们通常使用lambda表达式来创建匿名方法.然而,有时候我们仅仅是调用了一个已存在的方法.如下: Arrays.sort(stringsArray,(s1,s2)->s1.compareToIgnoreCase(s2)); 在Java8中,我们可以直接通过方法引用来简写lambda表达式中已

  • 使用java8的方法引用替换硬编码的示例代码

    背景 想必大家在项目中都有遇到把一个列表的多个字段累加求和的情况,也就是一个列表的总计.有的童鞋问,这个不是给前端做的吗?后端不是只需要把列表返回就行了嘛...没错,我也是这样想的,但是在一场和前端的撕逼大战中败下阵来之后,这个东西就落在我身上了.当时由于工期原因,时间比较紧,也就不考虑效率和易用性了,只是满足当时的需求,就随便写了个方法统计求和.目前稍微闲下来了,就把原来的代码优化下.我们先来看一下原来的代码... 原代码 工具类 import org.apache.commons.lang3

  • Java8中方法引用的使用详解

    1. 引言 Java8中最受广大开发中喜欢的变化之一是因为引入了 lambda 表达式,因为这些表达式允许我们放弃匿名类,从而大大减少了样板代码,并提高了可读性. 方法引用是lambda表达式的一种特殊类型.它们通常通过引用现有方法来创建简单的lambda表达式. 方法引用包括以下四种类型: 静态方法 特定对象的实例方法 特定类型的任意对象的实例方法 构造方法 在本篇文章中,我们将探讨Java中的方法引用. 2. 引用静态方法 We'll begin with a very simple exa

  • 一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用

    目录 函数式接口概述 函数式接口示例 1.Runnable接口 2.自定义函数式接口 3.作为参数传递 Lambda 表达式 内置函数式接口 Lambda简述 Lambda语法 方法引用 构造器引用 数组引用 函数式接口概述 只包含一个抽象方法的接口,称为函数式接口. 可以通过 Lambda 表达式来创建该接口的对象. 可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口.同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口.

  • Android利用软引用和弱引用避免OOM的方法

    想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题. 一.了解 强引用.软引用.弱引用.虚引用的概念 在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了. 从Java SE2开始,就提供了四种类型的引用:强引用.软引

  • Java8默认方法Default Methods原理及实例详解

    这篇文章主要介绍了Java8默认方法Default Methods原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java 8 引入了新的语言特性--默认方法(Default Methods). Default methods enable new functionality to be added to the interfaces of libraries and ensure binary compatibility wit

随机推荐