Java中双冒号(::)运算操作符
一、定义与理解
1、定义
双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta-conversion或者叫η-conversion。
2、理解
英文格式双冒号::,读:double colon,双冒号(::)运算符在Java 8中被用作方法引用(method reference),方法引用是与lambda表达式相关的一个重要特性。它提供了一种执行方法的方法,为此,方法引用需要由兼容的函数式接口组成的目标类型上下文。
大致意思是,使用lambda表达式会创建匿名方法, 但有时候需要使用一个lambda表达式只调用一个已经存在的方法(不做其它), 所以这才有了方法引用!
大概意思就是,使用lambda表达式会创建匿名函数, 但有时候需要使用一个lambda表达式只调用一个已经存在的方法(不做其它), 所以这才有了方法引用!
二、使用
1、使用场景
双冒号(::)使用场景一般有如下6种:
2、案例详解
2.1)引用静态方法
2.2)引用特定对象实例方法
2.3)引用特定类型的任意对象的实例方法
注意:不要和引用静态方法搞混,认为为什么compareToIgnoreCase是非静态方法却可以使用类名去引用,这两者根本不是一回事,双冒号前的类含义也不同,就是两个应用方向
运行结果如下:
2.4)引用超类(父类)实例方法
2.5)引用类构造方法
一般我们需要声明接口,该接口作为对象的生成器,通过 类名::new 的方式来实例化对象,然后调用方法返回对象。
运行结果可以看下:
2.6)引用数组构造方法
我们可以借助jdk自带的java.util.function.Function类实现对数组构造函数的引用。
当然,我们也可以使用@FunctionalInterface自定义函数式接口来实现:
Java中双冒号(::)运算操作符相关推荐
- java中双冒号的用法
java中双冒号的使用,即方法引用 构造器调用 Class类::new 特定对象的方法调用 instance::method 类的静态方法调用 Class::static method 任意对象的方法 ...
- java 8 双冒号操作
java 8 双冒号操作 本文我们讨论java 8 中的双冒号(::)操作以及其使用场景. 从lambda表达式到双冒号(::)操作 我们知道使用lambda表达式可以让代码非常简洁.举例,创建比较器 ...
- Python中双冒号的作用[::]
Python中双冒号的作用[::] Python sequence slice addresses can be written as a[start:end:step] and any of sta ...
- python中双冒号[::]切片的作用
如:a=[1,2,3.4,5] 我们写:print(a[x:y:z])时,x表示切片起点,y表示切片终点,z表示步长.如果不指定x和y,则默认开始和最后(-1倒序除外),如果不指定z,则默认步长为1. ...
- Java中「与运算,或运算,异或运算,取反运算。」
Java中「与运算,或运算,异或运算,取反运算.」 文章目录 Java中「与运算,或运算,异或运算,取反运算.」 Java中的「与运算(AND) & 」 规则 :都为1时才为1,否则为0 Ja ...
- Java中的幂运算(幂函数):如何编写一个数的n次方?
** Java中的幂运算(幂函数):如何编写一个数的n次方? ** java.lang.Math类中的pow方法. 方法声明:Math.pow(double m, double n) 参数说明:m为要 ...
- Python中的数学运算操作符使用进阶
原文链接:https://www.jb51.net/article/86988.htm 这篇文章主要介绍了Python中的数学运算操作符使用进阶,也包括运算赋值操作符等基本知识的小结 Python中对 ...
- html语言中的双冒号,::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用...
标题:::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用? 相关知识点: 单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素.(伪元素由双冒号和伪 ...
- C++中双冒号::的作用浅析
转载自:https://www.jb51.net/article/142032.htm C++中双冒号::的作用浅析 更新时间:2018年06月14日 11:59:12 作者:yz930618 在 ...
最新文章
- 图表君聊docker-仓库
- gunzip 和 unzip 解压文件到指定的目录
- 算法-----三数之和等于0
- C语言 链表的创建--打印--逆置--新增--删除--排序--释放
- 修改mysql文件的存储路径
- 内蒙古师范大学计算机科学技术学院,内蒙古师范大学计算机科学技术硕士生导师——李成城...
- 技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
- antd中分页器如何自定义_react+antd分页 实现分页及页面刷新时回到刷新前的page...
- 4月1日标准IO和文件IO的区别(个人收藏)
- mongovue mysql_mongo客户端mongoVUE的使用
- pacman基本命令
- 浅谈ES6基础——Promise
- python爬取网易云音乐百强榜单
- 常用数据集预处理(dota)
- 根据表格背景色统计表格数量
- python夯实基础日记-序列、列表、元组
- 扫地机器人能过凸起地面吗_适用于不平整地面的智能扫地机器人的制作方法
- 十一放假如何学习Linux等知识
- 三坐标测量圆直径_一种圆周均布孔位置度误差的三坐标测量方法