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

这篇文章主要介绍了java8方法引用和构造引用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一方法引用概述

方法引用是特定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 Lambda表达式的方法引用和构造器引用实例分析

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

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

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

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

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

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

  • 如何更好的使用Java8中方法引用详解

    前言 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法.方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文.计算时,方法引用会创建函数式接口的一个实例. 当Lambda表达式中只是执行一个方法调用时,不用Lambda表达式,直接通过方法引用的形式可读性更高一些.方法引用是一种更简洁易懂的Lambda表达式. 注意:方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号"::". 在Java8中,使用方法引用非常简单,如String

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

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

  • 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

  • Python面向对象魔法方法和单例模块代码实例

    魔法方法 ​ 凡是在类内部定义,以"__开头__结尾"的方法都称之为魔法方法,又称"类的内置方法", 这些方法会在某些条件成立时触发. 经常用到的双下方法 __init__: 在调用类时触发. __delarttr__: __getattr__: 会在对象.属性时,"属性没有"的情况下才会触发.对象.__dict__[属性]不会触发__getattr__,会报keyerror: __getattribute__:会在对象.属性时触发,不管有没有该

  • SpringMVC方法返回值多种情况代码实例

    返回ModelAndView 如果前后端不分的开发,大部分情况下,我们返回ModelAndView,即数据模型+视图: @Controller @RequestMapping("/user") public class HelloController { @RequestMapping("/hello") public ModelAndView hello() { ModelAndView mv = new ModelAndView("hello"

  • Java方法重载实现原理及代码实例

    方法的重载 重载就是在一个类中,有相同的函数名称,但形参不同的函数 方法重载的规则: 方法名称必须相同 参数列表必须不同(个数不同,类型不同,参数排列顺序不同) 方法的返回值类型可以相同也可以不相同 仅仅返回类型不同不足以成为方法的重载 实现理论 方法名称相同时,编译器会根据调用方法的参数个数,参数类型等去诸葛匹配,以选择对应的方法,如果匹配失败,则编译器报错 以比大小为例 package com.Xujie.Day09; public class Java09_01 { public stat

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

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

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

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

  • Java 值传递和引用传递详解及实例代码

     Java 值传递和引用传递 前言: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的. Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通

  • Android 软引用和弱引用详解及实例代码

    Android 软引用 和 弱引用    1.  SoftReference<T>:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2.  WeakReference<T>:弱引用-->随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收.要获取对象时,同样可以调用get方法. 3. WeakReference一般用来防止内存泄漏,要保证内存被虚拟机回收,SoftReference多用作来实现缓存机制(cache

随机推荐