Java语言规范:LambdaExpression在Java中条件表达式

问题描述:

在Java 8规格有以下syntax description of the conditional operator ?:Java语言规范:LambdaExpression在Java中条件表达式

ConditionalExpression: 
ConditionalOrExpression 
ConditionalOrExpression ? Expression : ConditionalExpression 
ConditionalOrExpression ? Expression : LambdaExpression 

我明白的前两行。但为什么第三行是必要的? LamdaExpression有什么特别的地方需要明确声明,在这里?我在下面的文字中没有看到这个问题。

我想我知道答案,但它很奇怪。

以下是第15章报价:运营商之间

优先级由语法 生产的层级管理。最低优先级运算符是lambda表达式( - >)的lambda表达式的箭头,后跟赋值运算符。因此,所有 表达式语法包含在LambdaExpression和 AssignmentExpression非终结符:

表达:LambdaExpression AssignmentExpression

的条件表达式是AssignmentExpression的一部分:

AssignmentExpression:条件表达式分配

如您所述,ConditionalExpression的第三部分只能是ConditionalExpression,而不是Expression

使第三部分为Expression将包括像Assignment不可取的事情:

a? b : c=d // bad idea? 

但是,限制第三部分ConditionalExpression而不是Expression省去了LambdaExpression,所以现在需要与

明确添加

Conditional Or Expression?表达:LambdaExpression

这实际上带来了一个问题:怎么来Assignment是条件表达式的第二部分确定,但三分不中?