Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
514 views
in Technique[技术] by (71.8m points)

java - Compiler complains about "missing return statement" even though it is impossible to reach condition where return statement would be missing

In the following method, the compiler complains about a missing return statement even though there is only a single path through the method, and it contains a return statement. Suppressing the error requires another return statement.

public int foo() {
    if (true) {
        return 5;
    }
}

Given that the Java compiler can recognize infinite loops, why doesn't it handle this situation as well? The linked question hints, but doesn't provide details for this specific case.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

JLS 14.21, Unreachable Statements is the section that deals with this:

The if statement, whether or not it has an else part, is handled in an unusual manner. For this reason, it is discussed separately at the end of this section.

Ultimately it has to do with how conditional compilation is handled. Consider this method:

public int foo() {
    if (DEBUG) {
        return 5;
    }
}

If DEBUG is static final boolean true; you might think the compiler should be smart enough to realize the method will always return 5. But if it's changed to false, the code is no longer valid.

The method must be valid for all paths through the method without a source code change, allowing optimizing compilers to omit bytecode without source modifications regardless of the flag's value.

The very end of the linked JLS section goes in to significant detail.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...