双冒号(::)运算符在Java8中被用作方法引用(method reference),方法引用是与lambda表达式相关的一个重要特性。它提供了一种不执行方法的方法。为此,方法引用需要由兼容的函数接口组成的目标类型上下文。
一、定义与理解
1、定义
双冒号运算操作符是类方法的句柄,lambda表达式的一种简写,这种简写的学名叫eta-conversion或者叫η-conversion。
2、理解
英文格式双冒号::,读:double colon,双冒号(::)运算符在Java 8中被用作方法引用(method reference),方法引用是与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自定义函数式接口来实现:
来源:本文为CSDN博主「yangzhe19931117」的原创文章
原文链接:https://blog.csdn.net/yangzhe19931117/article/details/128246653
延伸阅读
常用语法
- 静态方法引用语法:className::methodName 例如:Person::getAge
- 对象的实例方法引用语法:instanceName::methodName 例如:System.out::println
- 对象的超类方法引用语法:super::methodName
- 类构造器引用语法:className::new 例如:ArrayList::new
- 数组构造器引用语法:typename[]::new 例如:String[]::new
来源:本文为CSDN博主「心潮的滴滴」的原创文章
原文链接:https://blog.csdn.net/qq_42582773/article/details/127170070
文章标题:java双冒号是什么操作符,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37391