前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java8新特性】浅谈方法引用和构造器引用

【Java8新特性】浅谈方法引用和构造器引用

作者头像
冰河
发布2020-10-29 16:50:32
3700
发布2020-10-29 16:50:32
举报
文章被收录于专栏:冰河技术

作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:

https://github.com/sunshinelyz/mykit-delay

PS: 欢迎各位Star源码,也可以pr你牛逼哄哄的代码。

写在前面

Java8中一个很牛逼的新特性就是方法引用和构造器引用,为什么说它很牛逼呢?往下看!

方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!这里需要注意的是:实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!

那么什么是方法引用呢?方法引用就是操作符“::”将方法名和对象或类的名字分隔开来。

有如下三种使用情况:

  • 对象::实例方法
  • 类::静态方法
  • 类::实例方法

这里,我们可以列举几个示例。

例如:

代码语言:javascript
复制
(x) -> System.out.println(x);

等同于:

代码语言:javascript
复制
System.out::println

例如:

代码语言:javascript
复制
BinaryOperator<Double> bo = (x, y) -> Math.pow(x, y);

等同于

代码语言:javascript
复制
BinaryOperator<Double> bo = Math::pow;

例如:

代码语言:javascript
复制
compare((x, y) -> x.equals(y), "binghe", "binghe")

等同于

代码语言:javascript
复制
compare(String::equals, "binghe", "binghe")

注意:当需要引用方法的第一个参数是调用对象,并且第二个参数是需要引用方法的第二个参数(或无参数)时:ClassName::methodName 。

构造器引用

格式如下所示:

代码语言:javascript
复制
ClassName::new

与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数列表要与接口中抽象方法的参数列表一致!

例如:

代码语言:javascript
复制
Function<Integer, MyClass> fun = (n) -> new MyClass(n);

等同于

代码语言:javascript
复制
Function<Integer, MyClass> fun = MyClass::new;

数组引用

格式如下所示。

代码语言:javascript
复制
type[]::new

例如:

代码语言:javascript
复制
Function<Integer, Integer[]> fun = (n) -> new Integer[n];

等同于

代码语言:javascript
复制
Function<Integer, Integer[]> fun = Integer[]::new;

写在最后

如果觉得文章对你有点帮助,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习Java8新特性。

最后,附上Java8新特性核心知识图,祝大家在学习Java8新特性时少走弯路。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰河技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 方法引用
  • 构造器引用
  • 数组引用
  • 写在最后
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档