日期:2014-05-20  浏览次数:20670 次

有些异常不可能抛出,但还是要用throws声明?怎么办?
比如我有

void downloadPage()
{
    URL url=new URL("http://www.google.com");
    do(url);
}


URL这个构造函数会抛出MalformatedException。但我这里url字符串已经写死了,是正规的url。

在这种情况下,大家在方法签名上加上throws MalformatedException,还是用try包住,在catch块里不写任何代码?
------解决方案--------------------
你说“不可能抛出”,也就是说,“如果抛出,那就是严重的程序bug”,
所以 try - catch  然后在 catch 块中 log,封装成合适的类型的 RuntimeException 抛出。

这件事说明 URL 的构造方法,以及 MalformatedException 都是很糟糕的设计。

见我之前发的帖子: http://bbs.csdn.net/topics/390640865
“如果你发现自己在代码中频繁的 catch 一个检查异常,然后转换抛出一个非检查异常,那这个检查异常的设计多半有问题。”