2012-12-08 58 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

正如我前面評論的那樣,它不是**三元運算符,它是**三元運算符。具體來說,這是條件運算符。 =) –

相關問題