2014-02-07 17 views
0

目前还加载从URL图像的方法,然后像如下处理它:如何正确提取在java中加载资源的简单try/catch块?

BufferedImage tempImage; 
try { 
    tempImage = ImageIO.read(url); 
} 
catch (IOException e) { 
    return; 
} 
final BufferedImage image = tempImage; 

清洁码了一下,我想提取try/catch块,同时保留功能如果图像加载失败,退出该方法。我试图提取所述块如下:

final BufferedImage image = loadImageFromURL(); 
if (image == null) 
    return; 

//-------------------------------------- 

private BufferedImage loadImageFromURL() { 
    BufferedImage tempImage = null; 
    try { 
     tempImage = ImageIO.read(url); 
    } 
    catch (IOException e) { 
     LogUtils.severe(e); 
    } 
    return tempImage; 
} 

的问题是,如果图像的加载失败后,该方法返回null,其不使代码的任何清洁剂,如我必须执行一个附加的空检查。我已阅读了Clean Code:敏捷软件工匠手册,但所有示例似乎都以某种形式重新抛出异常:是唯一/正确的方法吗?

+2

你真的想返回*默默* *?通常,如果出现错误,您确实想让错误传播。在这种情况下,你甚至不需要抓住它。 –

回答

1

我们不知道您处于的完整情况,但我只是在方法签名中添加了一个throw子句并且不使用任何try catch。

private BufferedImage loadImageFromURL() throws IOException 
{ 
    return ImageIO.read(url); 
} 

基本上可以解决回到原来的方法,而不会提取try-catch。如果加载失败,该方法将停止,但不会真正返回。这个例外会一直回到正确处理它的一段代码。