2012-12-08 36 views
2

我得到试图编译“而不是声明”编译错误,代码为:为什么我使用?:条件运算符不正确?

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

当功能是:

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

什么想法?

+2

不能对void方法使用?:条件运算符。您必须从声明中返回一些内容。 –

+0

使用'if/else'而不是'::'。 – kennytm

回答

5

是的,你不能使用那样的conditional operator。它旨在计算一个表达式或其他结果。这并不是要选择一个陈述执行或另一个的方式。

只需使用:

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

添加到什么@乔恩飞碟双向说,三元操作符(你用的是什么)被设计成这种方式使用:

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

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

+1

它不是**三元运算符。它是一个**三元运算符。然而,它是**条件操作符。 –

+1

从技术上讲,它是一个有条件的运算符。 –

1

正如JLS - Section 15.25 - Conditional Operator指出: -

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

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

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

三元运算符不能与方法/操作返回空隙使用。

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

+1

正如我前面评论的那样,它不是**三元运算符,它是**三元运算符。具体来说,这是条件运算符。 =) –

相关问题