Method Reference在JDK 8中使用的四个场景

学习过JDK 8的都知道,在JDK 8中两个重要的特性就是Lambda Expression和Stream API.

Lambda Expression可以使用在任何需要函数式接口的地方。(只包含一个抽象方法的接口,在JDK 8中,接口可以有默认实现)

而为了进一步简化Lambda Expression的使用。 JDK 8还设计了一层语法糖,我们称之为Method Reference.

它使用两个冒号表示::

下面我来介绍这四个场景。

第一种,

当你的Lambda Expression的实现调用了某个类的静态方法。

第二种,

当你的Lambda Expression的实现调用了某个类的实例方法。

需要注意的是,这里的rest代表的是可变参数,所以你可以有0至多个参数。

第三种,

当你的Lamdba Expression的实现调用了某一已经存在的对象的实例方法。这里最通常的例子是System.out.println.

例如,

如果有以下的Lambda Expression:

(input)->System.out.println(input)

可以变成:

System.out::println

第四种情况,可以看做是第一种的变种。那就是当Lambda Expression的实现是一个构造函数的时候。把构造函数理解为这个类的静态方法(方法名是new)

所以如果有以下的Lambda Expression:

(name)->new Person(name)

可以变成:

Person::new
时间: 2024-11-10 14:36:50

Method Reference在JDK 8中使用的四个场景的相关文章

Nashorn 在JDK 8中融合Java与JavaScript之力

从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调用Java.此外,它还提供了使用jrunscript从命令行运行JavaScript的能力.如果不需要非常好的性能,并且可以接受ECMAScript 3有限的功能集的话,那它相当不错了. 从JDK 8开始,Nashorn取代Rhino成为Java的嵌入式JavaScript引擎.Nashorn完全支

Nashorn——在JDK 8中融合Java与JavaScript之力--转

原文地址:http://www.infoq.com/cn/articles/nashorn 从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调用Java.此外,它还提供了使用jrunscript从命令行运行JavaScript的能力.如果不需要非常好的性能,并且可以接受ECMAScript 3有限的功能集的话,那它相当不错了. 从JDK 8开始,N

Nashorn——在JDK 8中融合Java与JavaScript之力

从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino.该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调用Java.此外,它还提供了使用jrunscript从命令行运行JavaScript的能力.如果不需要非常好的性能,并且可以接受ECMAScript 3有限的功能集的话,那它相当不错了. 从JDK 8开始,Nashorn取代Rhino成为Java的嵌入式JavaScript引擎.Nashorn完全支

Java Stream & Method Reference

目录 Java Stream & Method Reference 1. Stream流 1.1 概述 1.2 流式思想的概述 1.3 获取流 1.4 常用方法 1.5 练习:集合元素处理(传统方式) 1.6 练习:集合元素处理(Stream流方式) 2. 方法引用 2.1 基本介绍 2.2 通过对象名引用[成员方法] 2.3 通过类名称引用[静态方法] 2.4 通过super引用父类的普通成员方法 2.5 通过this引用本类的普通成员方法 2.6 类的构造器(构造方法)引用 2.7 数组的构

Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中

struts2的关于method="{1}"意思详解 <action   name= "Login_* "   method= "{1} "   class= "mailreader2.Login ">中Login_*带*是什么意思?method= "{1} "带{}这个是什么意思?====================================================name=

在 JDK 9 中更简洁使用 try-with-resources 语句

本文详细介绍了自 JDK 7 引入的 try-with-resources 语句的原理和用法,以及介绍了 JDK 9 对 try-with-resources 的改进,使得用户可以更加方便.简洁的使用 try-with-resources 语句. 在 JDK 7 之前,资源需要手动关闭. 例如下面一个很常见的文件操作的例子: Charset charset = Charset.forName("US-ASCII"); String s = ...; BufferedWriter wri

方法引用(method reference)

目录 方法引用(method reference) 1. 含义 2. 分类 3. 总结 方法引用(method reference) 1. 含义 方法引用实际上是 Lambda 表达式的一种语法糖. 我们可以将方法引用看作是一个"函数指针",function pointer 2. 分类 方法引用共分为 4 类: 类名::静态方法名 引用名(对象名)::实例方法名 类名::实例方法名(较难理解) 构造方法引用:类名::new (实际上就是调用一个类的构造方法来生成这个类的对象) 3. 总

认识元数据和IL(中)&lt;第四篇&gt;

书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件.程序集.托管模块,这些概念与元数据.IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知,下面是时候来了解什么是元数据,什么是IL这个话题了,我们继续. 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注

“全栈2019”Java第八十七章:类中嵌套接口的应用场景(拔高题)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第八十七章:类中嵌套接口的应用场景(拔高题) 下一章 "全栈2019"Java第八十八章:接口中嵌套接口的应用场景 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"J