【问题标题】:return Statement from each branching [duplicate]从每个分支返回语句[重复]
【发布时间】:2015-07-22 17:48:49
【问题描述】:

有时我发现一些像这样的编译错误 -

public static boolean returnTrueFalse(){

   if(someConditions) return true;

   if(someConditions){
      //do something
      return true;
   }

   if(someConditions){
      //do something
      return false;
   }

   //GOT A COMPILATION ERROR HERE


}

在上述情况下,我们在注释部分出现编译错误 - missing return statement。那么我们该如何避免这种情况呢?

谢谢

【问题讨论】:

标签: java if-statement return


【解决方案1】:

好吧,编译错误的信息很清楚:你的代码必须遇到每个可能的执行路径的返回语句,因为你的方法有一个非 void 返回类型。只需为最后一种情况添加 return 语句,或者如果您在正常执行中不应达到此状态,则抛出异常。

【讨论】:

    【解决方案2】:

    或者您可以使用以下结构。借助boolean 变量decision 从单点使用return 语句 -

    public static boolean returnTrueFalse(){
    
       boolean decision = false //or may be true based on your situation.
    
       if(someConditions) decision =  true;
    
       if(someConditions){
          //do something
          decision =  true;
       }
    
       if(someConditions){
          //do something
          decision =  false;
       }
    
       //returns at last; a single return
       //no branching
       return decision;
    
    
    }
    

    由于有多个return 语句,现在这里没有分支。所以没有编译错误。

    【讨论】:

    • 虽然这可能是个好主意,但值得注意的是,您的代码并不总是与 OP 示例中的代码相同,如果第一个 someConditions 为真,则 true 将被返回并休息方法中的代码将不会执行。使用if (i>2) true; if (i>1) true; if(i>0) false; 可以很好地看到它,因此我们将始终以false 结束,因为所有这些条件都是i>0 的子条件。
    • @Pshemo,感谢您的发现。一旦我也遇到了OP提到的相同情况,我就使用这个想法从这种情况中恢复过来。然后我没有考虑这些情况,不知何故我活了下来:)。从现在开始我必须考虑你提到的情况。
    【解决方案3】:

    在任何if 之外添加return 语句,或在其中一个if 语句中添加else。你的函数是 boolean 类型,应该返回 boolean 类型,而不是返回它的 void 类型。

    【讨论】:

    • 最好是最后一个,否则部分代码会死掉...
    猜你喜欢
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2012-05-04
    • 2015-10-11
    • 2020-05-28
    • 2014-09-22
    相关资源
    最近更新 更多