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
是条件表达式的第二部分确定,但三分不中?