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语言规范。

平等,关系和条件运算符

在以下示例中,此运算符应读作:“如果someConditiontrue ,则将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的表达式用作表达式语句。

现在你使用条件运算符的方式不是一个有效的表达式语句,从它的语法推断出来。 因此,您得到编译器错误。 您必须在上述任何上下文中使用它。