2

尝试编译时出现编译错误,“不是语句”,代码为:

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

当函数是:

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

有任何想法吗?

4

4 回答 4

5

是的,你不能像那样使用条件运算符。它旨在计算一个或另一个表达式作为结果。它并不是一种选择执行一个语句或另一个语句的方式。

只需使用:

if (checkDatabaseExist()) {
    connectToDB();
} else {
    buildDB();
}
于 2012-12-08T08:12:33.347 回答
1

JLS - 第 15.25 节 - 条件运算符中所述: -

第二个或第三个操作数表达式调用 void 方法是编译时错误。

因此,您必须使用if-else构造在不同的条件下调用您的方法。

if (checkDatabaseExist()) {
    connectToDB();
} else {
    buildDB();
}
于 2012-12-08T08:14:34.993 回答
1

三元运算符不能与返回void的方法/操作一起使用。

方法/表达式必须返回与引用类型兼容的值。

于 2012-12-08T08:17:08.077 回答
0

除了@Jon Skeet 所说,三元运算符(您正在使用的)旨在以这种方式使用:

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

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

于 2012-12-08T08:13:55.557 回答