Java缺少return语句

2023/05/30

1. 概述

在本教程中,我们将研究Java开发过程中的一个常见错误。通常,初学者都会遇到这样的问题,即Java应用程序中缺少return语句的错误。

缺少返回语句错误是编译时错误。它在编译阶段抛出。现代IDE会即时检查此错误。因此,这种类型的错误往往很容易检测到。

主要原因是:

  • return语句只是被错误地省略了
  • 该方法不返回任何值,但类型void未在方法签名中声明

2. 缺少Return语句

首先,我们将看几个例子。这些例子与错误省略的return语句有关。然后,我们将介绍方法签名中缺少void类型的示例。每个示例都展示了我们如何解决Java缺少返回语句错误。

2.1 省略Return声明

接下来,让我们定义一个简单的pow方法:

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

编译前面的代码后,我们得到:

java: missing return statement

为了解决这个问题,我们只需要在pow变量后面添加一个return语句:

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

因此,如果我们调用方法pow,我们会得到预期的结果。

同样,但对于条件结构,会出现此错误:

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";
        }
    }
}

上面的代码检查输入的数字。首先,将输入数字与0进行比较。如果条件为true,则返回一个字符串值。然后,如果数字大于0,我们会找到一个带有内部条件的for循环。如果“i”大于100,我们在for循环中的条件语句就满足了。但是,输入负数呢?是的你是对的。我们错过了默认的return语句。因此,如果我们编译代码,我们会再次得到java: missing return statement错误。

所以,为了修复它,我们只需要在方法的末尾放置一个默认的return语句:

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 Lambda中缺少返回值

此外,当我们使用lambda时,可能会出现此错误。对于函数,检测此错误可能有点棘手。流中的map方法是发生此错误的常见位置。让我们检查一下我们的代码:

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;
}

前面的代码看起来不错。有一个return语句。我们的返回数据类型等于方法签名。但是,流中map方法中的代码呢?map方法需要一个函数作为参数。在这种情况下,我们只将数据放入map方法内的字典中。结果,如果我们尝试编译这段代码,我们会再次遇到java: missing return statement错误。

接下来,要解决错误,我们只需将流中的map替换为forEach方法即可:

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

或者,直接从流中返回一个map:

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

2.3 缺少方法签名

最后一种情况是我们错过了向方法签名添加返回类型。因此,当我们尝试编译我们的方法时,我们会得到一个错误。下面的代码示例向我们展示了这种行为:

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

我们忘记添加int作为返回类型。如果我们将它添加到我们的方法签名将修复此错误:

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

3. 总结

在本文中,我们介绍了一些缺少return语句的示例。它如何出现在我们的代码中,以及我们如何修复它。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章