dei*_*rus 2 java ternary-operator
有人能告诉我为什么三元运算符的使用不正确吗?操作数2和3返回一个布尔值.
public class Something {
...
private static final double REFERENCE_FRAME_MID_X = 0;
private static final double REFERENCE_FRAME_MID_Y = 0;
private boolean findInsideOrOutsideGeneralEllipse(Point2D destCirclePos) {
List<Boolean> returnValue = new ArrayList<>();
Point2D referenceFrameCenter = new Point2D.Double(REFERENCE_FRAME_MID_X, REFERENCE_FRAME_MID_Y);
Ellipse2D insideAreaEllipse2D = getEllipse2D(referenceFrameCenter.getX(), referenceFrameCenter.getY(),
destCirclePos.distance(referenceFrameCenter));
// doesn't work
insideAreaEllipse2D.contains(destCirclePos) ? returnValue.add(true) : returnValue.add(false);
// works
if (insideAreaEllipse2D.contains(destCirclePos)) {
returnValue.add(true);
} else {
returnValue.add(false);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
Ily*_*lya 10
Java三元操作条件的用法应该是这样的
result = testCondition ? value1 : value2
Run Code Online (Sandbox Code Playgroud)
这是java语言规范.
在以下示例中,此运算符应读作:"如果someCondition为true,则将value1的值赋给result.否则,将value2的值赋给result
来自JLS - 条件运算符:
事实上,通过表达式语句(第14.8节)的语法,条件表达式不允许出现在可能出现void方法调用的任何上下文中.
某些类型的表达式可以用分号跟随它们作为语句:
Run Code Online (Sandbox Code Playgroud)ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression通过计算表达式来执行表达式语句; 如果表达式具有值,则丢弃该值.当且仅当表达式的评估正常完成时,表达式语句的执行才能正常完成.
与C和C++不同,Java编程语言只允许某些形式的表达式用作表达式语句.
现在你使用条件运算符的方式不是一个有效的表达式语句,从它的语法推断出来.因此,您会收到编译器错误.您必须在上述任何上下文中使用它.
| 归档时间: |
|
| 查看次数: |
4831 次 |
| 最近记录: |