Java ternary operator (?:) doesn't work; second or third operand return boolean

后端 未结 2 605
别那么骄傲
别那么骄傲 2020-12-04 03:08

Can someone tell me why this use of the ternary operator is incorrect? Operands 2 and 3 return a boolean.

public class Something {
...
private static final d         


        
相关标签:
2条回答
  • 2020-12-04 03:30

    From JLS - Conditional Operator:

    In fact, by the grammar of expression statements (§14.8), it is not permitted for a conditional expression to appear in any context where an invocation of a void method could appear.

    Grammar of expression statements from JLS - 14.8:

    Certain kinds of expressions may be used as statements by following them with semicolons:

    ExpressionStatement:
          StatementExpression ;
    
    StatementExpression:
           Assignment
           PreIncrementExpression
           PreDecrementExpression
           PostIncrementExpression
           PostDecrementExpression
           MethodInvocation
           ClassInstanceCreationExpression
    

    An expression statement is executed by evaluating the expression; if the expression has a value, the value is discarded. Execution of the expression statement completes normally if and only if evaluation of the expression completes normally.

    Unlike C and C++, the Java programming language allows only certain forms of expressions to be used as expression statements.

    Now the way you are using the conditional operator is not a valid expression statement, as inferred from it's grammar. And hence you get the compiler error. You have to use it in any of the above mentioned context.

    0 讨论(0)
  • 2020-12-04 03:52

    Usage of Java ternary operation condition should looks like

    result = testCondition ? value1 : value2
    

    it's java-language specification.

    Equality, Relational, and Conditional Operators

    In the following example, this operator should be read as: "If someCondition is true, assign the value of value1 to result. Otherwise, assign the value of value2 to result

    0 讨论(0)
提交回复
热议问题