jar*_*sik 9 java lambda java-8
我正在阅读Java 8 in Action.在3.5.2节中,有一个关于'void-compatibility rule'的段落:
如果lambda有一个语句表达式作为它的主体,它与一个返回void的函数描述符兼容(前提是参数列表也是兼容的).例如,以下两行都是合法的,即使添加List的方法返回一个布尔值而不是消费者上下文中预期的void(T - > void):
// Predicate has a boolean return
Predicate<String> p = s -> list.add(s);
// Consumer has a void return
Consumer<String> b = s -> list.add(s);
Run Code Online (Sandbox Code Playgroud)
你会如何描述'语句表达'?我以为这是陈述或表达.此虚空兼容性规则对我来说也不是100%清楚,你能想到其他任何例子吗?
Hol*_*ger 15
术语"语句表达式"或"表达式语句"指的是也允许用作语句的表达式.它们在Java语言规范,§14.8中描述.表达陈述.
他们包括
所以其他的例子是
Consumer<String> b = s -> counter++;
Function<String,Integer> f = s -> counter++;
Run Code Online (Sandbox Code Playgroud)
要么
Consumer<String> b = s -> new BigDecimal(s);
Function<String,BigDecimal> f = s -> new BigDecimal(s);
Run Code Online (Sandbox Code Playgroud)
根据经验,表格的lambda表达式x -> expression只对a Consumer(或void一般的函数类型)x -> { expression; }合法,如果合法的话.
| 归档时间: |
|
| 查看次数: |
980 次 |
| 最近记录: |