Return or not return
次のコードをコンパイルした時、コンパイルエラーが出るメソッドはどれでしょう?複数あります。
public class Main { String case1() { while (true) { } } private boolean case2 = true; String case2() { while (case2) { } } private final boolean case3 = true; String case3() { while (case3) { } } String case4() { boolean case4 = true; while (case4) { } } }
解説と答え
戻り値を返さないといけない場合でも到達不可能であればreturnを省略することができます。というか逆に書くとコンパイルエラーになります。
今回の問題は到達不可能かを問う問題です。
まずcase1は直接trueが入っているのでwhileの次の行が実行されることはないので、returnを書きません。
次にcase2ですが、これはコンパイル時には判断できないのでコンパイルエラーになります。
次にcase3ではfinalになっているので変数の中身が変わることはありません。なので次の行が実行されないことが分かるのでエラーにはなりません。
case4はスコープが狭くなっていますが、finalではないためコンパイルエラーになります。
なので、コンパイルエラーになるのは「case2, case4」です。