为什么我使用?:条件运算符不正确?

时间:2012-12-08 08:10:41

标签: java

尝试编译时遇到编译错误,“不是语句”,代码是:

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

当函数是:

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

任何想法?

4 个答案:

答案 0 :(得分:5)

是的,你不能那样使用conditional operator。它的目的是计算一个表达式或另一个表达式。它不是一种选择一个语句来执行或另一种方式的方法。

只需使用:

if (checkDatabaseExist()) {
    connectToDB();
} else {
    buildDB();
}

答案 1 :(得分:1)

JLS - Section 15.25 - Conditional Operator中所述: -

  

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

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

if (checkDatabaseExist()) {
    connectToDB();
} else {
    buildDB();
}

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

除了@Jon Skeet所说的,三元运算符(你正在使用的)设计用于这种方式:

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

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