尝试编译时遇到编译错误,“不是语句”,代码是:
(checkDatabaseExist())?connectToDB() : buildDB();
当函数是:
private boolean checkDatabaseExist() {...}
private void connectToDB(){...}
private void buildDB(){...}
任何想法?
答案 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)