如何从这种方法中正确返回?

时间:2012-07-04 08:02:43

标签: java exception-handling

我有一个返回boolean类型的方法:

boolean activate() {
  try {

  } catch(IOException e){

  } catch (FileNotFoundException e){

  }
}

如果有异常,我想知道是否需要返回falsetrue

4 个答案:

答案 0 :(得分:2)

你能不能说:

   boolean activate() {
      try {
          // Do Something risky...
          return true;

      } catch(IOException e){
        return false;
      }
      catch (FileNotFoundException e){
        return false;
      }

   }

答案 1 :(得分:1)

只有你知道什么激活应该在失败时返回。

如果你不知道我建议将异常抛出方法并让调用者处理。

答案 2 :(得分:0)

您应该确保在生产代码中以某种方式使用错误,但基本版本是:

boolean activate() {
    try {

    } catch(Exception e){
        return false;
    }
    return true;
}

答案 3 :(得分:0)

这是一个设计问题(因此可能会被关闭),但它确实表明了一个非常重要的观点:合同。你的职能合同是什么?

/** This function will activate <a thing> and report success or failure to do so.
 *  @return true if <thing> is activated, false otherwise.
 */  //THIS CONTRACT IS SUPER IMPORTANT WHEN THINKING ABOUT CODING
boolean activate() {
  try {
    //Some code
    return true;
  } catch(IOException e){
    Log.error("When attempting to activate <thing> an IOException was thrown.");
    return false;//It wasn't activated! There was an IO exception, therefore follow the contract.
  } catch (FileNotFoundException e){
    Log.error("When attempting to activate <thing> a FileNotFoundException was thrown.");
    return false;//It wasn't activated! There was a different exception, therefore follow the contract.
  }
}

但是,您会注意到日志记录的存在。为什么这很重要?因为你的代码应该响亮但耐用。在这种情况下;它返回一个合同正确的响应(true / false),因此调用它的任何代码都知道它是否成功并且可以在没有笨拙的异常处理或整个程序无理由崩溃的情况下正常运行。这意味着它是耐用的代码。但是,日志记录允许它响亮:这意味着,如果您正在监视应用程序的运行状况,您将很容易看到存在问题,并且确切地说是问题所在。然后你可以解决它。

合同。耐久性。可视性。