JAVA什么是表达语句_java – 为什么消费者接受语句体而不是表达体的lambdas?

首先,值得看一下Consumer< String>实际上是.

From the documentation:

Represents an operation that accepts a single input argument and

returns no result. Unlike most other functional interfaces, Consumer

is expected to operate via side-effects.

所以这是一个接受String并且不返回任何内容的函数.

Consumer p = ""::equals;

编译成功因为equals可以采用String(实际上是任何Object).等于的结果只是被忽略了.*

p = s -> "".equals(s);

这完全相同,但语法不同.编译器知道不添加隐式返回,因为Consumer不应返回值.如果lambda是一个函数< String,Boolean&gt ;,它将添加一个隐式返回.虽然.

p = s -> true;

这需要一个String(s),但因为true是表达式而不是语句,所以不能以相同的方式忽略结果.编译器必须添加隐式返回,因为表达式本身不能存在.因此,这确实有一个返回:布尔值.因此,它不是消费者.**

p = s -> ("".equals(s));

同样,这是一个表达,而不是一个陈述.暂时忽略lambdas,你会看到System.out.println(“Hello”)行;如果将它包装在括号中,它将同样无法编译.

If the body of a lambda is a statement expression (that is, an expression that would be allowed to stand alone as a statement), it is compatible with a void-producing function type; any result is simply discarded.

A lambda expression is congruent with a [void-producing] function type if … the lambda body is either a statement expression (07004) or a void-compatible block.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值