これはコンパイルされず、次のエラーが発生します: Illegal start of expression
. なんで?
public static AppConfig getInstance() {
return mConfig != null ? mConfig : (throw new RuntimeException("error"));
}
ユーティリティメソッドを書くことができます
public class Util
{
/** Always throws {@link RuntimeException} with the given message */
public static <T> T throwException(String msg)
{
throw new RuntimeException(msg);
}
}
そして、次のように使用します。
public static AppConfig getInstance()
{
return mConfig != null ? mConfig : Util.<AppConfig> throwException("error");
}
これは、Java の三項演算子の形式expression ? expression : expression
が であり、最後の部分としてステートメントを指定しているためです。式は値を与えますが、ステートメントは値を与えないため、これは意味がありません。条件が false であることがわかり、2 番目の値を与えようとした場合、Java は何をするつもりですか? 値はありません。
三項演算子は、完全なステートメントを使用せずに 2 つの変数の間ですばやく選択できるように設計されてif
います。これは、実行しようとしていることではないため、使用しないでください。最善の解決策は次のとおりです。
public static AppConfig getInstance() {
if (mConfig != null) {
return mConfig;
} else {
throw new RuntimeException("error");
}
}
三項演算子は、副作用を生成するようには設計されていません。副作用を生成するように作成することはできますが、それを読んでいる人はそれを期待しないので、if
明確にするために実際のステートメントを使用する方がはるかに優れています。
を返そうとしていthrow new RuntimeException("error")
ます。そのため、エラーが発生しています。戻ってくる場合とtrue
戻ってくるAppConfig
場合に備えて。false
exception