Why is my use of the ?: conditional operator incor

2020-04-14 08:38发布

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

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

when the functions are:

private boolean checkDatabaseExist() {...}
private void connectToDB(){...}
private void buildDB(){...}

any ideas?

标签: java
4条回答
▲ chillily
2楼-- · 2020-04-14 09:23

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();
}
查看更多
Evening l夕情丶
3楼-- · 2020-04-14 09:24

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)

查看更多
Ridiculous、
4楼-- · 2020-04-14 09:25

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

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

查看更多
Anthone
5楼-- · 2020-04-14 09:39

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();
}
查看更多
登录 后发表回答