为何给Java外层for循环加i<10条件会触发返回类型报错?
为什么添加
i<10后会出现"This method must return a result of type String"报错? 嘿,这个问题我之前踩过坑!其实核心原因是Java编译器会严格检查方法的所有执行路径是否都返回了符合要求的值,咱们一步步拆解来看:
原来的代码为啥没问题?
你最初的外层循环是for(int i = 0; ; i++)——这是个无限循环,没有终止条件。而内层循环j < 10一定会在第一次循环(j=0的时候)就执行return "success";,编译器能确定:不管怎么跑,这个方法一定会触发return,不会走到方法末尾,所以不会报错。
添加i<10后为啥报错了?
当你把外层循环改成for(int i = 0; i <10; i++),情况就变了:编译器会检测到一条可能的执行路径——当i递增到10时,外层循环会正常退出,这时候方法没有任何return语句,直接走到了方法结尾,没有返回值。而Java要求所有非void类型的方法,必须在所有可能的执行路径上都返回对应类型的值,所以编译器就抛出了这个错误。
怎么解决?
最简单的办法就是在外层循环结束后,加一个兜底的return语句,比如:
public String testFor() { for(int i = 0; i <10; i++) { for(int j = 0; j < 10; j++) { return "success"; } } // 兜底返回,确保所有路径都有返回值 return "default"; }
当然,如果你确定外层循环内一定会触发return(比如业务逻辑上不可能走到循环结束),也可以用throw new RuntimeException()来替代兜底return,但一般不推荐这种写法,还是明确返回值更稳妥。
内容的提问来源于stack exchange,提问作者HbnKing
相关产品推荐
相关产品推荐

