Java Top

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

> CHECK OUT THE COURSE

Authors Top

If you have a few years of experience in the Java ecosystem, and you’d like to share that with the community, have a look at our Contribution Guidelines.

1. Overview

In this tutorial, we're looking at a common mistake in the Java development process. Usually, beginners face this problem, the missing return statement error in the Java application.

The missing return statement error is a compile-time error. It's thrown during the compilation phase. Modern IDEs lint this error on the fly. Therefore this type of error tends to be easy to detect.

The main causes are:

  • a return statement was simply omitted by mistake
  • the method doesn't return any value, but type void is not declared in the method signature

2. Missing Return Statement

First, we're going to see a couple of examples. These examples are related to the return statement omitted by mistake. Then, we'll be looking for an example of the missing void type in the method signature. Each example shows how we can resolve the java missing return statement error.

2.1. Omitted Return Statement

Next, let's define a simple pow method:

public int pow(int number) {
    int pow = number * number;
}

As a result of compiling the previous code, we get:

java: missing return statement

In order to fix this problem, we just add a return statement after the pow variable:

public int pow(int number) {
    int pow = number * number;
    return pow;
}

Consequently, if we call method pow, we get the expected result.

Similarly, but with conditional structures, this error arises:

public static String checkNumber(int number) {
    if (number == 0) {
        return "It's equals to zero";
    }
    for (int i = 0; i < number; i++) {
        if (i > 100) {
            return "It's a big number";
        }
    }
}

The above code checks an input number. First, compare the input number with 0. If the condition is true, a string value is returned. Then, if the number is greater than 0, we find a for-loop with an inner condition. Our conditional statement inside for-loop is satisfied if “i” is greater than 100. But, what about a negative input number?. Yes, you are right. We miss a default return statement. Therefore, if we compile our code, we get the java: missing return statement error again.

So, in order to fix it, we just need to put a default return statement at the end of the method:

public static String checkNumber(int number) {
    if (number == 0) {
        return "It's equals to zero";
    }
    for (int i = 0; i < number; i++) {
        if (i > 100) {
            return "It's a big number";
        }
    }
    return "It's a negative number";
}

2.2. Missing Return in Lambdas

Besides, when we work with lambdas, this error could appear. For functions, it could be a little tricky to detect this error. The map method in streams is a common place where this error happens. Let's inspect our code:

public Map<String, Integer> createDictionary() {
    List<String> words = Arrays.asList("Hello", "World");
    Map<String, Integer> dictionary = new HashMap<>();
    words.stream().map(s -> {dictionary.put(s, 1);});
    return dictionary;
}

The previous code looks fine. There is a return statement. Our return data type is equal to the method signature. But, what about the code inside the map method in the stream?. The map method expects a function as the argument. In this case, we only put data into our dictionary inside the map method. As a result, If we try to compile this code, we get the java: missing return statement error again.

Next, to resolve the error, we simply replace the map with forEach method in the stream:

words.forEach(s -> {dictionary.put(s, 1);});

Or, directly return a map from the stream:

dictionary = words.stream().collect(Collectors.toMap(s -> s, s -> 1))

2.3. Missing Method Signature

Finally, the last case is when we missed adding a return type to our method signature. Consequently, when we try to compile our method, we get an error. The following code example shows us this behavior:

public pow(int number) {
    int pow = number * number;
    return pow;
}

We forgot to add the int as return type. If we add it to our method signature will fix this error:

public int pow(int number) {
    int pow = number * number;
    return pow;
}

3. Conclusion

In this article, we went through some examples of missing return statements. How it can appear in our code, and how we can fix it. This is useful to avoid future mistakes in our code and maybe a couple of minutes of code inspection.

As usual, all snippets used in this article are available over on GitHub.

Java bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> CHECK OUT THE COURSE
Generic footer banner
Comments are closed on this article!