繁体   English   中英

重构Java中的异常代码

[英]Refactoring exception code in java

我正在研究应该为两个不同的事物引发相同异常的代码,并且我不想将getExceptions方法与getIsbnNumber()方法一起使用。

有什么方法可以重构代码?

public void getIsbnNumber()
{
  try
  {
     value = new URN("urn:isbn:12345");
     if (value.getSecondElement() != "isbn")
     {
         //throws the urn same exception
     }
  }
  catch(URNException exception)
  {
      //throws the urn same exception
  }
  return value.getThirdElement(); // return 12345
}

确实,抛出异常,捕获并再次抛出异常没有任何意义(除非您要重新抛出异常之前要做某些事情-此处似乎并非如此)。

只需将它扔一次就可以了:

public void getIsbnNumber() 
{
    value = new URN("urn:isbn:12345");
    if(value.getSecondElement() != "isbn")
    {
        //throws the same exception
    }
    return value.getThirdElement(); // return 12345
}

我认为这里没有什么要修复的。 例如,在使用IO时,您会发现很多东西。 这种代码看起来很熟悉?

BufferedWriter bw = null;
try {
   bw = openWriter();
   doStuff();
} catch (IOException e) {
   handleError();
} finally {
   try {
       if (bw != null) bw.close();
   } catch (IOException e) { 
       // do nothing, or print stacktrace
   }
}

在IO的特殊情况下,您可以使用更好,更安全的Java构造,即try-with-resources

// this will close bw no matter what
try (BufferedWriter bw = openWriter()) {
   doStuff();
} catch (IOException e) {
   handleError();
}

如果您正在使用资源,请将它们设置为CloseableAutoCloseable并使用它。 否则,除了double try-catch之外,您别无选择。 为我们提供更多详细信息,以获得更好的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM