java中8_Java 8中的::(双冒号)运算符

通常,可以使用Math.max(int,int)调用reduce方法,如下所示:

reduce(new IntBinaryOperator() {

int applyAsInt(int left, int right) {

return Math.max(left, right);

}

});

这需要很多语法来调用Math.max.这就是lambda表达式发挥作用的地方.从Java 8开始,它允许以更短的方式执行相同的操作:

reduce((int left, int right) -> Math.max(left, right));

这是如何运作的? java编译器“检测”,您要实现一个接受两个int并返回一个int的方法.这相当于接口IntBinaryOperator的唯一方法的形式参数(要调用的方法reduce的参数).所以编译器会为您完成剩下的工作 – 它只是假设您要实现IntBinaryOperator.

但是当Math.max(int,int)本身满足IntBinaryOperator的形式要求时,它可以直接使用.因为Java 7没有任何允许方法本身作为参数传递的语法(您只能传递方法结果,但从不传递方法引用),所以在Java 8中引入了:: syntax语法来引用方法:

reduce(Math::max);

请注意,这将由编译器解释,而不是由JVM在运行时解释!虽然它为所有三个代码片段生成不同的字节码,但它们在语义上是相同的,因此最后两个可以被认为是上面的IntBinaryOperator实现的短(并且可能更有效)版本!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值