9

可能重复:
编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

Java中的以下方法编译得很好。

public String temp() {
    while(true) {
        if(true) {
            // Do something.
        }
    }
}

该方法有一个明确的返回类型,虽然它编译得很好,但它java.lang.String没有声明。return但是,以下方法无法编译。

public String tempNew() {
    if(true) {
        return "someString";
    }        
}

即使用语句指定的条件始终为真(它有一个永远不会被反射改变的常量),也会发出一个编译时错误,指示“缺少return语句”。该方法必须进行如下修改才能成功编译。ifboolean

public String tempNew() {
    if(true) {
        return "someString";
    } else {
        return "someString";
    }
}

或者

public String tempNew() {
    if(true) {
        return "someString";
    }

    return "someString";
}

关于while循环的第一种情况,第二种情况似乎是合法的,尽管它无法编译。

第二种情况是否有超出编译器功能之一的原因。

4

2 回答 2

3

因为它是死代码。死代码分析在方法返回分析的单独传递中完成,该方法执行一些更深入的分析,查看分支条件。

于 2012-10-20T17:34:51.630 回答
1

来自 java 教程:您可以使用 while 语句实现无限循环,如下所示:

while (true){
    // your code goes here
}

所以编译器知道这是无限的,因此可能不会返回 - 即不一定需要返回语句。

if (true)另一方面,这条线(它自己的)将返回,因此需要覆盖所有返回的分支。

于 2012-10-20T17:36:59.757 回答