我正在研究应该为两个不同的事情抛出相同异常的代码,并且我不想使用方法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
}
答案 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();
}
如果您正在使用资源,请将其设为Closeable
或AutoCloseable
并使用此资源。否则,除了双 try-catch 之外别无选择。给我们更多细节以获得更好的答案。