【初心者向けエラーシリーズ #14】Javaの「method must return a result of type ○○」エラーとは?戻り値の記述ミスとその対処法

この記事は約6分で読めます。
記事内に広告が含まれています。

Javaでメソッドを定義するとき、戻り値があるメソッドには必ず return 文を書く必要があります。このルールを忘れてしまうと、次のようなエラーメッセージが表示されます:

エラー: missing return statement(method must return a result of type ○○)

このエラーは初心者にとって特に分かりづらいものです。見た目にはreturnを書いているつもりでも、すべての分岐にreturn文が存在しなかったり、returnが実行されない可能性があるコードになっているため、コンパイル時に指摘されます。

この記事では、このエラーが発生する原因と修正方法を、初心者向けに分かりやすく解説します。具体的なコード例を示しながら、陥りやすいポイントや防止策も紹介します。


エラーメッセージの意味

エラーメッセージを構成する部分を分解して理解しましょう:

  • “method”:メソッドに対してのエラーであることを示しています。
  • “must return a result of type ○○”:宣言した型の値を必ず返さなければならない、という意味です。

つまり、戻り値を返す必要があるメソッドでreturnが不足している、またはすべてのコード経路でreturnされていないことを意味します。このエラーが出たら、まず「コードのすべての経路が必ずreturnに到達するか」を確認しましょう。


よくあるエラーのパターンと修正例

パターン①:return文を書き忘れている

エラー例

public class Main {
    public static int getNumber() {
        int x = 5;
    }
}

このコードでは、戻り値としてint型を指定しているにもかかわらず、return文が存在しないためエラーになります。

修正例

public class Main {
    public static int getNumber() {
        int x = 5;
        return x;
    }
}

戻り値がある場合は、処理の最後で必ずreturnを書く必要があります。処理が単純でも忘れないように注意しましょう。


パターン②:すべての分岐でreturnしていない

エラー例

public class Main {
    public static String check(int value) {
        if (value > 0) {
            return "Positive";
        }
        // それ以外の分岐でreturnがない
    }
}

if文の条件がtrueのときだけreturnされていますが、それ以外の条件では値を返さないためエラーになります。

修正例

public class Main {
    public static String check(int value) {
        if (value > 0) {
            return "Positive";
        } else {
            return "Not positive";
        }
    }
}

あるいは、elseを省略して末尾にreturnを書く形でも構いません:

public class Main {
    public static String check(int value) {
        if (value > 0) {
            return "Positive";
        }
        return "Not positive";
    }
}

このように、すべての経路で必ずreturnすることが重要です。条件分岐が複数あるときは、returnの抜け漏れに注意しましょう。


複雑な条件分岐での注意点

if-elseが複雑に入り組んでいる場合や、switch文を使う場合は、すべての分岐でreturnされるように気をつける必要があります。

エラー例

public static String getLabel(int code) {
    switch (code) {
        case 1: return "A";
        case 2: return "B";
    }
    // defaultがなく、他の値でreturnがない
}

修正例

public static String getLabel(int code) {
    switch (code) {
        case 1: return "A";
        case 2: return "B";
        default: return "Unknown";
    }
}

switch文では一見すべてのケースを網羅しているように見えても、defaultがなければreturnが漏れる可能性があります。必ずdefaultを追加しましょう。


void型と戻り値ありメソッドの違い

Javaでは、戻り値が不要なメソッドには void を指定します。void と戻り値ありの型を混同すると、returnの有無を誤解する原因になります。

void型の例

public static void sayHello() {
    System.out.println("Hello");
    // return文は不要(早期終了用にreturn;は書ける)
}

戻り値が必要な型の例

public static int getNumber() {
    return 10; // returnが必須!
}

「このメソッドは値を返す必要があるのか?」を常に意識して、voidと戻り値ありの違いを明確に区別しましょう。


エラーを防ぐためのポイント

  • 戻り値のあるメソッドでは必ずreturnを書く
  • すべての分岐でreturnがあるか確認する
  • voidと戻り値ありの違いを理解する
  • switch文や複雑な条件式ではdefaultや最後のreturnを忘れない
  • IDEの警告や補完機能を活用し、早めにミスを発見する

returnの書き忘れは単純ですが、実務でも頻繁に発生するエラーです。習慣的に確認することで防止できます。


まとめ

  • 「method must return a result of type ○○」は、戻り値の型を返していないときに発生するエラー。
  • 原因はreturnの書き忘れや分岐での漏れが多い。
  • voidと戻り値ありの違いを理解することが防止の第一歩。
  • すべての経路でreturnが行われるように意識すれば解決できます。

次回予告

次回は、「incompatible types: ○○ cannot be converted to ○○」エラーを解説します。型の不一致が原因で発生する代表的なエラーで、初心者にとっても頻出です。型変換やキャストの注意点を詳しく見ていきます。

コメント

タイトルとURLをコピーしました