Java三元运算符(?:)不起作用; 第二个或第三个操作数返回布尔值
有人能告诉我为什么三元运算符的使用不正确吗? 操作数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 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); } } ... }
Java三元操作条件的用法应该是这样的
result = testCondition ? value1 : value2
它是java语言规范。
平等,关系和条件运算符
在以下示例中,此运算符应读作:“如果someCondition为true ,则将value1的值赋给result。否则,将value2的值赋给result
来自JLS – 条件运算符 :
实际上,通过表达式语句(第14.8节)的语法,条件表达式不允许出现在可能出现void方法调用的任何上下文中。
来自JLS – 14.8的表达式语句的语法:
某些类型的表达式可以用分号跟随它们作为语句:
ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression
通过计算表达式来执行表达式语句; 如果表达式有值,则丢弃该值。 当且仅当表达式的评估正常完成时,表达式语句的执行才能正常完成。
与C和C ++不同,Java编程语言只允许某些forms的表达式用作表达式语句。
现在你使用条件运算符的方式不是一个有效的表达式语句,从它的语法推断出来。 因此,您得到编译器错误。 您必须在上述任何上下文中使用它。