我得到試圖編譯「而不是聲明」編譯錯誤,代碼爲:爲什麼我使用?:條件運算符不正確?
(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