Java8 方法引用
概述
方法引用是用来直接访问类或实例阴茎存在的方法或者构造方法.它需要由兼容的函数式接口(lambda表达式中用到的接口)构成的目标类型上下文. 有时候, 当我们想要实现一个函数式接口的方法, 但是已经由类实现了我们想要的功能, 这时可以使用方法引用来直接使用现有的功能实现.
关于lambda表达式可以看这篇文章Java8 Lambda表达式
当lambda表达式只是执行一个方法调用时, 直接通过方法引用的形式调用. 方法引用是一种更简洁的lambda表达式.
方法引用是lambda表达式的简写, 提高了代码可读性. 可以看出来, 方法引用就是用已经实现的方法来实现lambda表达式中的实现, 所以引用的方法要满足以下要求:
- 引用的方法的参数列表必须与实现的抽象方法参数列表保持一致.
使用
因为方法引用是简写的lambda表达式, 所以类比即可.
方法引用的语法为:
类或对象名::方法名或new
通过引用即可引用指定类或对象的指定方法
分类
下面介绍以下几种不同的方法引用.
1.静态方法引用
顾名思义, 静态方法引用就是引用类的静态方法, 语法为:
类名::静态方法名
方法引用与lambda表达式:
String::valueOf 等价于 s -> String.valueOf(s);
Math::pow 等价于 (x,y) -> Math.pow(x,y);
2.实例方法引用
顾名思义,实例方法引用就是引用对象实例的方法, 语法为:
对象实例::方法名
方法引用与lambda表达式:
String str = "aaaaaaaaaaa";
// 若实例方法要通过对象来调用, 第一个参数会成为调用实例方法的对象, 后面的参数为调用方法的参数
String::length 等价于lambda表达式 s -> s.length();
String::equals 等价于lambda表达式 (s1,s2) -> s1.equals(s2);
// 若实例方法为this或super, 参数会成为调用方法的参数
this::equals 等价于lambda表达式 s -> this.equals(s);
super::equals 等价于lambda表达式 s -> super.equals(s);
3.构造方法引用
顾名思义, 构造方法引用就是引用类的构造方法, 语法为:
类名::new
方法引用与lambda表达式:
// 会根据参数寻找合适的构造方法
String::new 等价于lambda表达式 s->new String(s);
也等价于 ()->new String();
// 同时也可以创建数组
int[]::new 等价于lambda表达式 x->new int[x];
关于方法引用的更多可以自己进行尝试
Java8 方法引用的更多相关文章
- Java8 方法引用和构造方法引用
如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言 ...
- JAVA8方法引用
方法引用:若Lambda方法体已经实现,我们可以使用方法引用* 主要有三种语法格式:* 对象::实例方法名* 类::实例方法名* 类::静态方法名** 注意:Lambda体中调用的方法的参数列表与返回 ...
- Java8 方法引用与构造器引用,数组引用
package java_8; import org.junit.Test; import java.io.PrintStream; import java.util.Comparator; impo ...
- Java8——方法引用
方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式.那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用. 一.方法引用的三种语法格式 ...
- java8 方法引用与lambda
List<String> list = new ArrayList<>(); //list.stream().filter((String s)->System.out. ...
- Java 方法引用_特性
JAVA8 方法引用:(四种方法引用的使用) 对象引用的特点:不同的对象可以操作同一块的内容:而方法引用就是指为一个方法设置别名,相当于一个方法定义了不同的名字. 引用静态方法: 类名称 :: sta ...
- Java笔记——Java8特性之Lambda、方法引用和Streams
Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...
- 30分钟入门Java8之方法引用
30分钟入门Java8之方法引用 前言 之前两篇文章分别介绍了Java8的lambda表达式和默认方法和静态接口方法.今天我们继续学习Java8的新语言特性--方法引用(Method Referenc ...
- Java8新特性之二:方法引用
上一节介绍了Java8新特性中的Lambda表达式,本小节继续讲解Java8的新特性之二:方法引用.方法引用其实也离不开Lambda表达式. 1.方法引用的使用场景 我们用Lambda表达式来实现匿名 ...
随机推荐
- 深入分析.NET应用程序SQL注入【危害】
前言: 前面我们已经简单的剖析了一下.NET应用程序SQL注入.没有看过的朋友移步:http://bbs.ichunqiu.com/thread-7636-1-1.html,在上一篇文章我们已经了 ...
- Javascript高级编程学习笔记(56)—— DOM2和DOM3(8)低版本IE范围
虽然IE9支持了DOM范围,但是IE8及更早版本并不支持DOM范围 所以IE8以下的更早版本的IE提出了与之类似的概念以供大家使用 也就是 文本范围 var range = document.body ...
- Python面向对象4:类的相关函数与属性
1 类相关函数- issubclass:检测一个类是否是另一个类的子类- isinstance:检测一个对象是否是一个类的实例- hasattr:检测一个对象是否由成员xxx- getattr: ge ...
- ajax jsonp请求报错not a function的解决方案
概述 最近工作中使用ajax,有时会报json4 is not a function的错误,有时又不会报错.找了很久,网上说是因为多次请求同一个资源导致的,但是我检查了自己的代码,对于重复资源并没有重 ...
- 如何将一个文本内容通过PHP 以表格的方式输入到页面上
如何将一个文本内容通过PHP 以表格的方式输入到页面上 <?php //读取文本内容 $contents = file_get_contents("names.txt"); ...
- Docker安装配置MongoDB并使用Robo 3T在局域网连接
主要参考了这位老兄的文章(传送门),写的还是比较详细的. 不废话直接来正经的. 1.docker pull mongo 从docker hub拉取最新的mongo镜像文件,300多M大小. 2.doc ...
- python --商品评价---- 数据表结构以及理解
商品评论(评价)功能 1.概述 评论功能已经成为APP和网站开发中的必备功能.本文主要介绍评论功能的数据库设计. 评论功能最主要的是发表评论和回复评论(删除功能在后台).评论功能的拓展功能体现有以下几 ...
- asp.net core mvc上传大文件解决方案
默认上传文件大小不超过30M 第一个问题: IIS 10.0 详细错误 - 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 服务器上的请求筛选被配置为拒绝该请求 ...
- linux设置打开文件句柄数
介绍 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默认是 ...
- sql server 索引阐述系列四 表的B-Tree组织
一.概述 说到B-tree组织,就是指索引,它可以提供了对数据的快速访问.索引使数据以一种特定的方式组织起来,使查询操作具有最佳性能.当数据表量变得越来越大,索引就变得十分明显,可以利用索引查找快速满 ...