“缺少退货声明”在 if / for / while 内

2022-09-02 09:45:21

我对内部使用的退货报表或报表有疑问。if()while()for()

正如您在以下方法中看到的那样,它期望I为字符串值。问题是,如果我在语句块中使用语句,编译器将返回错误 。returnreturnifmissing return statement

public String myMethod()
{
    if(condition)
    {
        return x;
    }
}

当然,我可以将方法标头更改为并使用而不是 .但这是正确的方法吗?我错过了什么吗?voidSystem.out.printlnreturn


答案 1

如果将 return 语句放在 或 语句中,则它可能返回值,也可能不返回值。如果它不会进入这些语句,那么该方法也应该返回一些值(可能是null)。为了确保这一点,编译器将强制您编写此 return 语句,该语句位于 、 或 之后。ifwhileforifwhilefor

但是,如果您编写一个 /块,并且每个块中都有一个返回值,则编译器知道 or 将被执行,并且该方法将返回一个值。所以这次编译器不会强迫你。ifelseifelse

if(condition)
{
    return;
}
else
{
    return;
}

答案 2

这是因为该函数需要返回一个值。想象一下,如果你执行并且它没有进入你的函数会返回什么,会发生什么?编译器需要知道在函数的每次可能执行中要返回什么。myMethod()if(condition)

检查 Java 文档:

定义:如果方法声明具有返回类型,则方法末尾必须有一个返回语句。如果返回语句不存在,则会引发缺少的返回语句错误。

如果该方法没有返回类型并且没有使用 void 声明(即,它被错误地省略),也会引发此错误。

您可以执行此操作来解决您的问题:

public String myMethod()
{
    String result = null;
    if(condition)
    {
        result = x;
    }
    return result;
}