Why is my use of the ?: conditional operator incorrect?

前端 未结 4 858
广开言路
广开言路 2021-01-22 07:09

I get a compilation error while trying to compile, \"not a statement\", and the code is:

(checkDatabaseExist())?connectToDB() : buildDB();

when

相关标签:
4条回答
  • 2021-01-22 07:13

    Adding to what @Jon Skeet said, a Ternary operator (What you're using) is designed to be used in this sort of way:

    String s = someBoolean ? "someBoolean is true" : "someBoolean is false";
    

    (condition) ? (value if true) : (value if false)

    0 讨论(0)
  • 2021-01-22 07:17

    As stated in JLS - Section 15.25 - Conditional Operator: -

    It is a compile-time error for either the second or the third operand expression to be an invocation of a void method.

    So, you must use an if-else construct to invoke your methods on different condition.

    if (checkDatabaseExist()) {
        connectToDB();
    } else {
        buildDB();
    }
    
    0 讨论(0)
  • 2021-01-22 07:27

    The ternary operator can not be used with methods/operations returning void.

    The methods/expressions must return a value compatible with the reference type.

    0 讨论(0)
  • 2021-01-22 07:33

    Yes, you can't use the conditional operator like that. It's intended to compute one expression or another as a result. It's not intended to be a way of choosing one statement to execute or another.

    Just use:

    if (checkDatabaseExist()) {
        connectToDB();
    } else {
        buildDB();
    }
    
    0 讨论(0)
提交回复
热议问题