sch*_*ein 3 java conditional-operator
为什么我必须将以下条件表达式的结果分配给变量才能使其编译?
piece.isWhite() ? whitePieceSquares.add(getSquare(pos)) : blackPieceSquares.add(getSquare(pos));
Run Code Online (Sandbox Code Playgroud)
以上不编译,下面做了:
boolean garbage = piece.isWhite() ? whitePieceSquares.add(getSquare(pos)) : blackPieceSquares.add(getSquare(pos));
Run Code Online (Sandbox Code Playgroud)
List#add()返回一个布尔值,但我会忽略它.只是条件运算符的设计方式是必须分配从函数返回的值,那些返回函数必须具有相同的类型吗?
从JLS的第14.8节(表达式陈述):
某些类型的表达式可以用分号跟随它们作为语句:
Run Code Online (Sandbox Code Playgroud)ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression通过计算表达式来执行表达式语句; 如果表达式具有值,则丢弃该值.当且仅当表达式的评估正常完成时,表达式语句的执行才能正常完成.
与C和C++不同,Java编程语言只允许某些形式的表达式用作表达式语句.
...
另一方面,该语言允许表达式语句中所有最有用的表达式,并且它不需要用作表达式语句的方法调用来调用void方法,因此几乎不需要这样的技巧.如果需要技巧,可以使用赋值语句(第15.26节)或局部变量声明语句(第14.4节).
基本上,条件运算符的主要目的是评估其操作数 - 您将其用于副作用.
Peter Lawrey的答案显示了一个更好的用法 - 你使用条件运算符来确定将哪个方块添加到其中,然后在其上调用方法.
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |