java中的方法引用(method reference)官方文档总结
2017/7/5
转载写明出处:http://www.cnblogs.com/daren-lin/p/java-method-reference.html
今天要说的是java中的一项新特性,方法引用,method reference。方法引用完全可以用lambda来代替,不会根本不影响平时的开发,但是如果学会了方法引用的话,可以装逼!
本文按照官方文档的例子来解释。
方法引用(method reference)
方法引用只是lambda表达式的拓展,如果不了解lambda表达式,请先阅读本文:java语言中的匿名类与lambda表达式介绍与总结
有时候lambda表达式只是调用了一个已经申明过的方法,为了增加可读性(zhuang bi)和进一步简化,可以使用方法引用。
下面的例子可以很好说明方法引用的使用情形
例子:如果想要按照年龄(age)来给人(Person)排序
有一个Person的数组 rosterAsArray。首先我们实现一个 Comparator,然后使用Arrays.sort来排序
Person[] rosterAsArray = roster.toArray(new Person[roster.size()]);
class PersonAgeComparator implements Comparator<Person> {
public int compare(Person a, Person b) {
return a.getBirthday().compareTo(b.getBirthday());
}
}
Arrays.sort(rosterAsArray, new PersonAgeComparator());
这里我们看到Comparator实际上是个函数接口(functional interface),所以直接用lambda来简化
Arrays.sort(rosterAsArray,
(Person a, Person b) -> {
return a.getBirthday().compareTo(b.getBirthday());
}
);
假设Person中已经存在一个static的方法 Person.compareByAge 来比较两个人的年龄,那么我们可以写成如下
Arrays.sort(rosterAsArray,
(a, b) -> Person.compareByAge(a, b)
);
这个时候我们发现,实际上这个lambda只是调用了已经存在的一个函数compareByAge,那么我们就可以用方法引用了,我们可以写成更简单的形式:
Arrays.sort(rosterAsArray, Person::compareByAge);
一行搞定!
4种不同类型的方法引用
很直接,我就不做说明直接上表格了
| 类型 | 例子 |
|---|---|
| static方法的引用 | ContainingClass::staticMethodName |
| 特定对象的方法的引用 | containingObject::instanceMethodName |
| 特定类型的方法的引用 | ContainingType::methodName |
| 构造器的引用 | ClassName::new |
参考
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html
java中的方法引用(method reference)官方文档总结的更多相关文章
- 方法引用(Method reference)和invokedynamic指令详细分析
方法引用(Method reference)和invokedynamic指令详细分析 invokedynamic是jvm指令集里面最复杂的一条.本文将详细分析invokedynamic指令是如何实现方 ...
- Java中的函数式编程(四)方法引用method reference
写在前面 我们已经知道,lambda表达式是一个匿名函数,可以用lambda表达式来实现一个函数式接口. 很自然的,我们会想到类的方法也是函数,本质上和lambda表达式是一样的,那是否也可以用类 ...
- java中的方法引用
引用静态方法:类名称::static 方法名称: 引用某个对象的方法:对象::普通方法: 引用特定类方法:特定类::方法 引用构造方法:类名称::new 范例:引用静态方法 package com.j ...
- Java 8Lambda之方法引用(Method References)
方法引用分为4类,方法引用也受到访问控制权限的限制,可以通过在引用位置是否能够调用被引用方法来判断.具体分类信息如下: 类型 使用方式 静态方法 ContainingClass::staticMeth ...
- java中的方法(method)到底怎么用?给个例子
7.方法(method) 被调例子, int add(int x, int y){ return x+y; } 主调例子, for example: int result = add(5,3); ...
- java 方法引用(method reference)
it -> it != null等价于Objects::nonNull
- java中的强引用(Strong reference),软引用(SoftReference),弱引用(WeakReference),虚引用(PhantomReference)
之前在看深入理解Java虚拟机一书中第一次接触相关名词,但是并不理解,只知道Object obj = new Object()类似这种操作的时候,obj就是强引用.强引用不会被gc回收直到gc roo ...
- jboss7 Java API for RESTful Web Services (JAX-RS) 官方文档
原文:https://docs.jboss.org/author/display/AS7/Java+API+for+RESTful+Web+Services+(JAX-RS) Content Tuto ...
- Unity关于方法事件生命周期官方文档
http://docs.unity3d.com/Manual/ExecutionOrder.html 一.组件运行的基本顺序 下图中创建类的顺序为A,B,C,A1,二运行的结果为A1,B,C,A. 可 ...
随机推荐
- 卸载XCode插件的方法
1.Finder--前往---前往文件夹--输入~/Library/Developer/Xcode/Plug-ins 2.删除要卸载的插件即可.
- Comparing the contribution of NBA draft picks(转)
When it comes to the NBA draft, experts tend to argue about a number of things: at which position wi ...
- 每R一点:层次聚类分析实例实战-dist、hclust、heatmap等(转)
聚类分析:对样品或指标进行分类的一种分析方法,依据样本和指标已知特性进行分类.本节主要介绍层次聚类分析,一共包括3个部分,每个部分包括一个具体实战例子. 1.常规聚类过程: 一.首先用dist()函数 ...
- 中文分词中的战斗机-jieba库
英文分词的第三方库NLTK不错,中文分词工具也有很多(盘古分词.Yaha分词.Jieba分词等).但是从加载自定义字典.多线程.自动匹配新词等方面来看. 大jieba确实是中文分词中的战斗机. 请随意 ...
- nodeJS之二进制buffer对象
前面的话 在ES6引入TypedArray之前,JavaScript语言没有读取或操作二进制数据流的机制.Buffer类被引入作为Nodejs的API的一部分,使其可以在TCP流和文件系统操作等场景中 ...
- 前端向后台的华丽转身 — PHP基础篇
这一次,本K带大家来看一下关于PHP中数组.字符串的一些注意事项和函数(方法). 一.PHP中的数组 (一)PHP中的数组简介 数组类型是PHP两种复合数据类型之一.根据下标的不同,可以将PHP中的数 ...
- Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的 ...
- 每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- Vulkan Tutorial 16 Command buffers
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 诸如绘制和内存操作相关命令,在Vulkan中不是通过函数直接调用的.我们需要在命令缓 ...
- 用javascript实现java的Map
function Map(){ var obj={}; //空的容器 //put方法 this.put=function(key,value){ obj[key]=value; //把键值绑定到obj ...