return语句的不同用例

时间:2017-07-29 05:07:36

标签: java

最近,我可以通过一些让我有点困惑的代码:

我总是觉得以这种方式回归是不好的做法。首先,除了查看日志之外,没有办法知道出了什么问题。我问了一下,一般的想法似乎是抛出一个异常将导致错误的代码,因为人们可能会抓住异常而不采取任何措施。这真的是不抛异常的好理由吗?如果是这样,还有其他方法可以处理吗?

public void checkThisOut() {
   String str = null; 
   str = someMethodThatCanReturnNull(); 
   if(str == null) {
      //log error
      return;
   }
}

另一个例子如下:在此上下文中,break和return之间有什么区别?一个比另一个好吗?

public void update() {
    List<Object> objects = SomeClass.findObjects();
    for( Object o : objects ) {
        if( o.getSomething().equals("some value" ) ) {
            o.doSomething();
            return;
        }
    }
}

5 个答案:

答案 0 :(得分:2)

抛出一个异常,意图是它用于控制流程(例如,如果(a)然后执行b,否则如果异常则执行c)通常被认为是不好的做法。

但是在你的第一个例子中,如果你期望结果不为null并且你确实收到一个null,并且如果这是一个你无法继续的意外错误条件,那么这是一个很好的例子何时抛出异常。

答案 1 :(得分:2)

当代码抛出异常时,调用者有选择如何反应。如果错误只是记录但没有传播给调用者 - 那么调用者甚至不知道错误。

因此,不抛出的论点是无稽之谈。当你害怕其他人写错代码时 - 那么你教育他们做得更好。你自己不会开始编写糟糕的代码。但是当正确地记录异常时,为什么以及何时发生这种情况。

对于第二种情况:结果行为没有区别。所以只有风格 - 做你的团队正常做的事情。

答案 2 :(得分:1)

抛出异常并不是错误的代码。您不应该使用常规控制流的异常。

对于您的第二个示例,breakreturn相等,但我会使用return,因为它的意图会更加清晰。如果您想在循环后执行某些操作,则可以将其更改为break

答案 3 :(得分:1)

  

抛出异常会导致代码错误,因为人们可能会抓住异常而不对它做任何事情

我不同意编写错误代码以避免其他错误代码。如果null返回值表示错误,那么您应该抛出异常。

答案 4 :(得分:0)

对于你的第二个问题:中断和返回在这里没有任何区别,因为在for循环后没有任何内容。 如果你在for循环之后添加代码会有所不同,在这种情况下,return会完全退出方法,而break会在for循环结束时跳转。

没有比另一个好,这取决于你打算做什么。返回可能更清晰,更快捷(更容易理解),但许多人认为方法应该只有一个返回结果,并且有两个或更多是不好的做法(因为它使代码更难理解)

如果你必须返回一个值,以防你找不到你正在搜索的对象,比如indexOf返回-1:将找到的项存储在一个变量中,打破循环并在结尾处有一个返回,或者在方法中有两个return语句。两者都是正确的方法。