有些异常不可能抛出,但还是要用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 一个检查异常,然后转换抛出一个非检查异常,那这个检查异常的设计多半有问题。”