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. 可 ...
随机推荐
- [转]GET,POST,PUT,DELETE的区别
原文链接:http://blog.csdn.net/mfe10714022/article/details/39692305 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,P ...
- MySql学习笔记(一) —— 关键字的使用
1.distinct关键字 作用:检索出有不同值的列,比如一个商品表中存在供应商vend_id,一个供应商会对应很多商品,我们要查找有多少供应商,就可以用到该关键字去重. select distinc ...
- Java虚拟机原理
1.编译机制 分析和输入到符号表: 词法分析:将代码转化为token序列 语法分析:由token序列生成抽象语法树 输入到符号表:将类中出现的符号输入到类的符号表 注解处理: 处理用户自定义注解,之后 ...
- mysql之 日志体系(错误日志、查询日志、二进制日志、事务日志、中继日志)
一. mysql错误日志:错误日志记录的事件:a).服务器启动关闭过程中的信息b).服务器运行过程中的错误信息c).事件调试器运行一个事件时间生的信息d).在从服务器上启动从服务器进程时产生的信息lo ...
- nginx安装文档
1. 安装依赖包 yum -y install pcre-devel yum -y install openssl-devel yum -y install gcc yum -y install ...
- linux系统必学-部分链接
vi操作笔记 vim操作笔记 好网站,临时收藏 SEO十万个为什么 9RIA.com天地会--中国最大的专业Flash论坛 ===互联网=============================== ...
- node.js零基础详细教程(5):express 、 路由
第五章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- Ajax请求,跨域小坑
今天在上班的时候,被坐在旁边项目经理叫过去问了一个Ajax请求跨域的问题,一开始没理解清楚也还有对这个没有理解的透,后面被打击的要死. 当时的需求是需要测试一个已发布的api接口,需要在本地写测试程序 ...
- ThreadLocal来管理事务
ThreadLocal (扩展) 1 ThreadLocal API ThreadLocal类只有三个方法: l void set(T value):保存值: l T get():获取值: l ...
- 20+行代码使用es5 Object.defineProperty 实现简单的watch功能
/** * 一个简单的demo 帮助理解defineProperty,只对Object类型参数有效 */ $watch=function(myObject,callback){ function in ...