重构java

时间:2015-10-01 18:16:09

标签: java exception refactoring

我正在研究应该为两个不同的事情抛出相同异常的代码,并且我不想使用方法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
}

2 个答案:

答案 0 :(得分:1)

实际上,抛出一个异常,抓住它并再次抛出它是没有意义的(除非在重新投掷它之前你想要做什么 - 这似乎不是在这里是这样的。)

简单地抛出一次,不要抓住它:

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

答案 1 :(得分:1)

我认为这里有什么需要解决的。例如,在使用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并使用此资源。否则,除了双 try-catch 之外别无选择。给我们更多细节以获得更好的答案。