我得到试图编译“而不是声明”编译错误,代码为:为什么我使用?:条件运算符不正确?
(checkDatabaseExist())?connectToDB() : buildDB();
当功能是:
private boolean checkDatabaseExist() {...}
private void connectToDB(){...}
private void buildDB(){...}
什么想法?
我得到试图编译“而不是声明”编译错误,代码为:为什么我使用?:条件运算符不正确?
(checkDatabaseExist())?connectToDB() : buildDB();
当功能是:
private boolean checkDatabaseExist() {...}
private void connectToDB(){...}
private void buildDB(){...}
什么想法?
是的,你不能使用那样的conditional operator。它旨在计算一个表达式或其他结果。这并不是要选择一个陈述执行或另一个的方式。
只需使用:
if (checkDatabaseExist()) {
connectToDB();
} else {
buildDB();
}
添加到什么@乔恩飞碟双向说,三元操作符(你用的是什么)被设计成这种方式使用:
String s = someBoolean ? "someBoolean is true" : "someBoolean is false";
(condition) ? (value if true) : (value if false)
它不是**三元运算符。它是一个**三元运算符。然而,它是**条件操作符。 –
从技术上讲,它是一个有条件的运算符。 –
正如JLS - Section 15.25 - Conditional Operator指出: -
第二个或第三个操作数 表达式是void方法的调用的编译时错误。
因此,您必须使用if-else
构造以不同的条件调用您的方法。
if (checkDatabaseExist()) {
connectToDB();
} else {
buildDB();
}
三元运算符不能与方法/操作返回空隙使用。
方法/表达式必须返回与引用类型兼容的值。
正如我前面评论的那样,它不是**三元运算符,它是**三元运算符。具体来说,这是条件运算符。 =) –
不能对void方法使用?:条件运算符。您必须从声明中返回一些内容。 –
使用'if/else'而不是'::'。 – kennytm