「ステートメントではありません」とコンパイルしようとすると、コンパイルエラーが発生します。コードは次のとおりです。
(checkDatabaseExist())?connectToDB() : buildDB();
関数が次の場合:
private boolean checkDatabaseExist() {...}
private void connectToDB(){...}
private void buildDB(){...}
何か案は?
「ステートメントではありません」とコンパイルしようとすると、コンパイルエラーが発生します。コードは次のとおりです。
(checkDatabaseExist())?connectToDB() : buildDB();
関数が次の場合:
private boolean checkDatabaseExist() {...}
private void connectToDB(){...}
private void buildDB(){...}
何か案は?
はい、そのような条件演算子を使用することはできません。結果として、ある式または別の式を計算することを目的としています。これは、実行するステートメントまたは別のステートメントを選択する方法を意図したものではありません。
使用するだけです:
if (checkDatabaseExist()) {
connectToDB();
} else {
buildDB();
}
JLSで述べられているように-セクション15.25-条件演算子:-
2番目または3番目のオペランド式がvoidメソッドの呼び出しである場合、コンパイル時エラーになります。
したがって、if-else
コンストラクトを使用して、さまざまな条件でメソッドを呼び出す必要があります。
if (checkDatabaseExist()) {
connectToDB();
} else {
buildDB();
}
三項演算子は、 voidを返すメソッド/操作では使用できません。
メソッド/式は、参照タイプと互換性のある値を返す必要があります。
@Jon Skeetが言ったことに加えて、三項演算子(使用しているもの)は、この種の方法で使用されるように設計されています。
String s = someBoolean ? "someBoolean is true" : "someBoolean is false";
(condition) ? (value if true) : (value if false)