2016-08-19 9 views
2

syntax description of the conditional operator ?:があります:Java言語仕様:Javaの8仕様でJava ConditionalExpressionでLambdaExpression

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

私は最初の2行を理解しています。しかし、なぜ3行目が必要ですか?明示的に宣言する必要があるLamdaExpressionについて特別なものは何ですか?私は次の文章でこれについて議論していない。

答えて

2

私は答えを知っていると思いますが、それは変です。ここで

は、第15章からの引用です:事業者間の

の優先順位は、文法 プロダクションの階層で管理されています。最も低い優先順位の演算子はラムダ 式( - >)の矢印で、その後に代入演算子が続きます。このように、すべての 式が構文的にLambdaExpressionと AssignmentExpression非終端に含まれています:

式:

AssignmentExpression:ConditionalExpression割り当て

LambdaExpression AssignmentExpression ConditionalExpressionがAssignmentExpressionの一部である

引用すると、ConditionalExpressionの3番目の部分は、Expressionではなく、ConditionalExpressionになります。 Expressionに第三の部分を作る

Assignmentのような望ましくないもの含まれます:

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

をしかし、ConditionalExpressionではなくExpressionに第三部を制限することLambdaExpressionを抜けて、今それが

で明示的に追加する必要があります

条件付表現?式:条件式の第二部ではなく、第三にOKかAssignment来るです:LambdaExpression

これは、実際に次の質問をもたらしますか?