一、定义与理解

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中双冒号(::)运算操作符相关推荐

  1. java中双冒号的用法

    java中双冒号的使用,即方法引用 构造器调用 Class类::new 特定对象的方法调用 instance::method 类的静态方法调用 Class::static method 任意对象的方法 ...

  2. java 8 双冒号操作

    java 8 双冒号操作 本文我们讨论java 8 中的双冒号(::)操作以及其使用场景. 从lambda表达式到双冒号(::)操作 我们知道使用lambda表达式可以让代码非常简洁.举例,创建比较器 ...

  3. Python中双冒号的作用[::]

    Python中双冒号的作用[::] Python sequence slice addresses can be written as a[start:end:step] and any of sta ...

  4. python中双冒号[::]切片的作用

    如:a=[1,2,3.4,5] 我们写:print(a[x:y:z])时,x表示切片起点,y表示切片终点,z表示步长.如果不指定x和y,则默认开始和最后(-1倒序除外),如果不指定z,则默认步长为1. ...

  5. Java中「与运算,或运算,异或运算,取反运算。」

    Java中「与运算,或运算,异或运算,取反运算.」 文章目录 Java中「与运算,或运算,异或运算,取反运算.」 Java中的「与运算(AND) & 」 规则 :都为1时才为1,否则为0 Ja ...

  6. Java中的幂运算(幂函数):如何编写一个数的n次方?

    ** Java中的幂运算(幂函数):如何编写一个数的n次方? ** java.lang.Math类中的pow方法. 方法声明:Math.pow(double m, double n) 参数说明:m为要 ...

  7. Python中的数学运算操作符使用进阶

    原文链接:https://www.jb51.net/article/86988.htm 这篇文章主要介绍了Python中的数学运算操作符使用进阶,也包括运算赋值操作符等基本知识的小结 Python中对 ...

  8. html语言中的双冒号,::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用...

    标题:::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用? 相关知识点: 单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素.(伪元素由双冒号和伪 ...

  9. C++中双冒号::的作用浅析

    转载自:https://www.jb51.net/article/142032.htm C++中双冒号::的作用浅析 更新时间:2018年06月14日 11:59:12   作者:yz930618 在 ...

最新文章

  1. 图表君聊docker-仓库
  2. gunzip 和 unzip 解压文件到指定的目录
  3. 算法-----三数之和等于0
  4. C语言 链表的创建--打印--逆置--新增--删除--排序--释放
  5. 修改mysql文件的存储路径
  6. 内蒙古师范大学计算机科学技术学院,内蒙古师范大学计算机科学技术硕士生导师——李成城...
  7. 技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议
  8. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
  9. antd中分页器如何自定义_react+antd分页 实现分页及页面刷新时回到刷新前的page...
  10. 4月1日标准IO和文件IO的区别(个人收藏)
  11. mongovue mysql_mongo客户端mongoVUE的使用
  12. pacman基本命令
  13. 浅谈ES6基础——Promise
  14. python爬取网易云音乐百强榜单
  15. 常用数据集预处理(dota)
  16. 根据表格背景色统计表格数量
  17. python夯实基础日记-序列、列表、元组
  18. 扫地机器人能过凸起地面吗_适用于不平整地面的智能扫地机器人的制作方法
  19. 十一放假如何学习Linux等知识
  20. 三坐标测量圆直径_一种圆周均布孔位置度误差的三坐标测量方法

热门文章

  1. 黑客攻陷'360安全论坛' 偷窃网游和QQ帐号
  2. crmeb多商户2.0正式版 新增DIY、PC端客服、同城配送平台等完整包下载更新包下载
  3. 厉害了我的琴!钢琴教育竟然用上了AI+云计算?
  4. Linux系统软件安装及项目发布
  5. Python练习3:求N的多次方
  6. UE4 角色上下车功能
  7. List转String的简单方法
  8. java lambda表达式 list转string
  9. 量子计算 4 超光速信息传播?密度矩阵与混合态
  10. 完美的Python代码制作“恐龙跳一跳“小游戏【附带源码 】