Java 语言中的双冒号“::”是什么操作符

文章 未结 置顶 0 3.1w
无法显示用户头像
作者:道简,责任编辑:道简 2 白银
发布于 2019-07-31
双冒号运算就是Java中的[方法引用] Method references [方法引用]的格式是 类名::方法名 一般是用作Lambda表达式。 形如 ClassName::methodName 或者 objectName::methodName 的表达式,我们把它叫做方法引用(Method Reference)。可能你现在还理解不了,但是编译器足够聪明,或许你可以看看编译器是如何根据 “晦涩难懂” 的 Method Reference 来推断你的意图的。 例如: [pre] 1.表达式: person -> person.getName(); 可以替换成: Person::getName 2.表达式: () -> new HashMap<>(); 可以替换成: HashMap::new [/pre] 方法引用的种类 方法引用有四种,分别是: 指向静态方法的引用 指向某个对象的实例方法的引用 指向某个类型的实例方法的引用 指向构造方法的引用 img[https://newecode1024.oss-cn-hongkong.aliyuncs.com/18ac7e13-caa4-4fc8-84cf-ce28d6948c28.jpg]  总结 其实,JVM 本身并不支持指向方法引用,过去不支持,现在也不支持。 Java 8 对方法引用的支持只是编译器层面的支持,虚拟机执行引擎并不了解方法引用。编译器遇到方法引用的时候,会像上面那样自动推断出程序员的意图,将方法引用还原成接口实现对象,或者更形象地说,就是把方法引用设法包装成一个接口实现对象,这样虚拟机就可以无差别地执行字节码文件而不需要管什么是方法引用了。 需要注意的是,方法引用是用来简化接口实现代码的,并且凡是能够用方法引用来简化的接口,都有这样的特征:有且只有一个待实现的方法。这种接口在 Java 中有个专门的名称: 函数式接口。当你用试图用方法引用替代一个非函数式接口时,会有这样的错误提示: xxx is not a functional interface。

声明:本文所有观点仅代表创作者本人,ECode1024系信息收集发布平台,ECode1024仅提供信息存储以及展示服务。若有侵权,请联系我们删除。
回复
  • 暂无任何回复,抢个沙发吧~~
推荐阅读
ECode1024 QQ交流群

打开手机QQ扫码加入 ECode1024 交流群

ECode1024 微信交流群

打开手机微信扫码关注 ECode1024 公众号