【发布时间】:2009-01-08 18:10:37
【问题描述】:
在为我的项目决定异常处理结构时,我一直在概念上陷入困境。
假设你有,例如:
public abstract class Data {
public abstract String read();
}
还有两个子类 FileData,它从某个指定的文件中读取您的数据,以及 StaticData,它只返回一些预定义的常量数据。
现在,在读取文件时,可能会在 FileData 中抛出 IOException,但 StaticData 永远不会抛出。大多数样式指南建议将异常向上传播到调用堆栈,直到有足够多的上下文可用以有效处理它。
但我并不想在抽象的 read() 方法中添加 throws 子句。为什么?因为数据和使用它的复杂机器对文件一无所知,它只知道数据。此外,可能还有其他 Data 子类(以及更多)从不抛出异常并完美地传递数据。
另一方面,IOException 是必需的,因为如果磁盘不可读(或类似情况),则必须抛出错误。所以我看到的唯一出路是捕获 IOException 并在其位置抛出一些 RuntimeException。
这是正确的哲学吗?
【问题讨论】: