読者です 読者をやめる 読者になる 読者になる

Return or not return

Java

次のコードをコンパイルした時、コンパイルエラーが出るメソッドはどれでしょう?複数あります。

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」です。