Java中的以下方法编译得很好。
public String temp() {
while(true) {
if(true) {
// Do something.
}
}
}
该方法有一个显式的返回类型,java.lang.String
没有return
语句,虽然它编译得很好。但是,以下方法无法编译。
public String tempNew() {
if(true) {
return "someString";
}
}
发出编译时错误,指示“缺少return
语句”,即使使用if
语句指定的条件始终为true(它具有{{1永远不会被反射改变)。为了成功编译,必须修改该方法,如下所示。
boolean
或
public String tempNew() {
if(true) {
return "someString";
} else {
return "someString";
}
}
关于public String tempNew() {
if(true) {
return "someString";
}
return "someString";
}
循环的第一种情况,第二种情况似乎是合法的,尽管它无法编译。
第二种情况是否有理由超出编译器的一个特性。
答案 0 :(得分:3)
因为它是死代码。死代码分析是在方法返回分析的单独传递中完成的,它进行了一些更深入的分析,查看分支条件。
答案 1 :(得分:1)
从java教程: 您可以使用while语句实现无限循环,如下所示:
while (true){
// your code goes here
}
所以编译器知道这是无限的,因此可能不会返回 - 即不一定需要返回语句。
另一方面,if (true)
行(在它自己的行上)将返回,因此需要覆盖所有返回的分支。