“可能出错的事情和不可能出错的事情之间的主要区别在于,当一个不可能出错的事情出错时,通常结果是无法找到或修复。” -道格拉斯·亚当斯
我有一个类 FileItems。FileItems 构造函数接受一个文件,如果该文件不存在,则引发异常 (FileNotFoundException)。该类的其他方法也涉及文件操作,因此能够抛出 FileNotFoundException。我想找到一个更好的解决方案。不需要其他程序员处理所有这些极不可能的 FileNotFoundExceptions 的解决方案。
事情的真相:
- 该文件已被检查是否存在,但极不可能的可能性是,由于现实的某些重大故障,该文件可能会在调用此方法之前被删除。
- 由于 1 发生的概率非常不同且不可恢复,因此我更愿意定义一个未经检查的异常。
- 该文件已经被发现存在,强迫其他程序员编写代码并捕获检查的 FileNotFoundException 似乎乏味无用。该程序应该在那时完全失败。例如,计算机总是有可能着火,但没有人疯狂到强迫其他程序员将其作为检查异常处理。
- 我不时遇到这种异常问题,每次遇到这个问题(我的旧解决方案)时定义自定义的未经检查的异常是很烦人的,并且会增加代码膨胀。
代码目前看起来像这样
public Iterator getFileItemsIterator() {
try{
Scanner sc = new Scanner(this.fileWhichIsKnowToExist);
return new specialFileItemsIterator(sc);
} catch (FileNotFoundException e){ //can never happen}
return null;
}
在不定义自定义未检查 FileNotFoundException 的情况下,我怎样才能做得更好?有没有办法将checkedException转换为uncheckException?