/**
* 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。<br>
* 与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
*@date:2018年7月9日
*@author:zhangfs
*/
public class Car { public static Car create(final Supplier<Car> supplier) {
return supplier.get(); } public static void collide(final Car car) {
System.out.println("Collided " + car.toString());
} public void follow(final Car another) {
System.out.println("Following the " + another.toString());
} public void repair() {
System.out.println("Repaired " + this.toString());
}
/**
* 构造器引用<br>
* 语法是Class::new,或者更一般的Class< T >::new。请注意构造器没有参数
*/
@Test
public void constructorRef() {
Car car=Car.create(Car::new);
car.repair();
} /**
* 类的静态方法引用<br>
* 语法是Class::static_method。请注意这个方法接受一个Car类型的参数。
*/
@Test
public void staticMethodRef() {
final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );
// Car::collide();
cars.forEach( Car::collide );
}
/**类的方法引用<br>
* 语法是Class::method。请注意,这个方法没有参数
*/
@Test
public void commonMethodRef() {
final Car car = Car.create( Car::new );
final List< Car > cars = Arrays.asList( car );
// Car::collide();
cars.forEach( Car::repair );
} /**
* 对象的方法引用<br>
* 语法是instance::method。请注意,这个方法接受一个Car类型的参数
*/
@Test
public void objMethodRef() {
final Car police = Car.create( Car::new );
final List< Car > cars = Arrays.asList( police ); cars.forEach( police::follow );
}
}

lambda表达式之方法引用的更多相关文章

  1. JAVA8之Lambda表达式与方法引用表达式

    一.Lambda表达式 基本语法: lambdaParameters->lambdaBody lambdaParameters传递参数,lambdaBody用于编写逻辑,lambda表达式会生成 ...

  2. java8的新特性之lambda表达式和方法引用

    1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...

  3. Java函数式编程:一、函数式接口,lambda表达式和方法引用

    Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...

  4. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现

    问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...

  5. Java 8 Lambda表达式之方法引用 ::双冒号操作符

    双冒号运算符就是java中的方法引用,方法引用的格式是类名::方法名. 这里只是方法名,方法名的后面没有括号“()”.--------> 这样的式子并不代表一定会调用这个方法.这种式子一般是用作 ...

  6. Lambda表达式和方法引用

    1 , 为什么用lambda表达式 将重复固定的代码写法简单化 2   ,lambda表达式的实质 对函数式接口的实现(一个接口中只有一个抽象方法的接口被称为函数式接口) package com.mo ...

  7. Java提升二:Lambda表达式与方法引用

    1.Lambda表达式 1.1.定义 lambda表达式是对于函数式接口(只含有一个抽象方法的接口)的简洁实现方式.它与匿名内部类的作用相似,但是就使用范围而言,匿名内部类更为广泛,而lambda表达 ...

  8. 一文带你深入了解 Lambda 表达式和方法引用

    前言 尽管目前很多公司已经使用 Java8 作为项目开发语言,但是仍然有一部分开发者只是将其设置到 pom 文件中,并未真正开始使用.而项目中如果有8新特性的写法,例如λ表达式.也只是 Idea Al ...

  9. Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系

    1.Lambda表达式与接口之间的关系 只要Lambda表达式的声明形式与接口相一致,在很多情况下都可以替换接口.见如下代码 Thread t1 = new Thread(new Runnable() ...

随机推荐

  1. Mybatis报错invalid comparison: java.util.Date and java.lang.String

    请求参数中两个属性确实都是date类型,数据库也确认是data类型,这个错误是因为 在这里把date类型的参数与单引号做了比较出现的,删除就可以正常运行了.

  2. NOI Online #3 提高组 游记

    考的好就来写游记吧 2020.5.24 星期日 上一天晚上为了班里事物做 PPT 肝到 11:30,这比赛就打打玩玩.第二天醒来有点昏昏沉沉的感觉. 打开题面,一看 T1,好像是个性质极其简单的前缀和 ...

  3. 记一道好VAN的数学题

    2020.4.12 Solution 首先发掘几个性质: \(99\) 个点可以分成 \(33\) 组,每组中个\(3\) 个点组成等边三角形.两两端点相差 \(33\) 条弧. 任意状态下,已经染完 ...

  4. Java PDF全套笔记

    java 知识pdf文档,基本涵盖了java知识点 java基础部分:https://github.com/HOSystemH/JavaFile/tree/master/JavaPDF java高级部 ...

  5. 20201207-2 openpyxl 库与模块导入

    1-1 import openpyxl # 通过文件路径,打开工作簿 wb1 = openpyxl.load_workbook('./demo_excel.xlsx') # 用 Workbook() ...

  6. JavaSE14-集合·其一

    1.Collection集合 1.1 集合体系结构 集合 (接口)Collection:单列 (接口)List:可重复 (实现类)ArrayList (实现类)LinkedList (接口)Set:不 ...

  7. LLVM程序分析日记之 basic blocks could have duplicate predecessors

    We used the predecessors() to get the predecessors of a basic block based on LLVM's IR. The code is ...

  8. js上 三、数据类型

    3.1.什么是数据类型 a. 什么是数据类型? 想从生活中出发: 考验智商的时刻到了: 1(只)+1(只)=1(双) 3(天)+4(天)=1(周) 5(月)+7(月)=1(年) 4(时)+9(时)=1 ...

  9. Unity射击实例讲解—子弹创建

    前言: 这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足.另外自己魔改过的版本也是花钱买了一些模型, ...

  10. 网络知识扫盲——DNS

    参考文章链接  : https://baijiahao.baidu.com/s?id=1668393227924896391&wfr=spider&for=pc 一.DNS 是什么? ...